ass*_*ler 9 c++ ternary-operator conditional-operator
为什么这句话:
int a = 7, b = 8, c = 0;
c = b>a?a>b?a++:b++:a++?b++:a--;
cout << c;
Run Code Online (Sandbox Code Playgroud)
不等于:
int a = 7, b = 8, c = 0;
c = (b>a?(a>b?a++:b++):a++)?b++:a--;
cout << c;
Run Code Online (Sandbox Code Playgroud)
并且等于:
int a = 7, b = 8, c = 0;
c = b>a?(a>b?a++:b++):(a++?b++:a--);
cout << c;
Run Code Online (Sandbox Code Playgroud)
请给我一些理由.为什么?
我相信@sth提供了正确的答案,但是,我认为@Skilldrick在评论中说得对 - 为什么你会写这样的东西.
除了优先级问题之外,在单个语句中递增相同变量时,您确实需要小心.声明中可能有也可能没有序列点,因此可能无法保证增量的评估顺序.您可能会在同一编译器上使用不同的编译器甚至不同的优化设置得到不同的结果.
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |