有一个正常工作的代码:
#include <iostream>
int sum_odd_digits(int n)
{
if(n==0) return 0;
else return (((n%2)!=0)?n%10:0) + sum_odd_digits(n/10);
}
int main(int argc, char ** argv)
{
std::cout<<sum_odd_digits(25897641)<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是如果要去掉外括号,即替换
else return (((n%2)!=0)?n%10:0) + sum_odd_digits(n/10);
Run Code Online (Sandbox Code Playgroud)
和
else return ((n%2)!=0)?n%10:0 + sum_odd_digits(n/10);
Run Code Online (Sandbox Code Playgroud)
程序开始给出错误的输出结果,即开始不正确地工作。
为什么?这两条线有什么区别?
这是由于运算符优先级: 的+优先级高于?:,因此您的错误版本解析为:
((n%2)!=0) ? n%10 : (0 + sum_odd_digits(n/10));
^ ^
// addition is grouped first
Run Code Online (Sandbox Code Playgroud)
现在与第一个版本有明显不同的分组。