我有下面的程序,除了我以外,每个人都应该很简单!
#include <iostream>
using namespace std;
int main()
{
int a, b;
b = 1;
cout << ((a = --b) ? b : (b = -99)) << '\n' << "a is " << a << '\n' << "b is " << b << endl;
b = 1;
cout << (a = --b ? b : (b = -99)) << '\n' << "a is " << a << '\n' << "b is " << b << endl;
}
程序的输出是:
-99
a 为 0
b是-99
-99
a是-99
b是-99
第一段代码我的理解是a被赋予了值--b,0,所以它变成了false,所以b=-99被执行了。我无法理解第二段代码,其中 a=--b 没有括号,为什么 a 的值为 -99。
最佳答案
这是因为 =
与 ?:
( C++ operator priorities ) 具有相同的优先级。在这种情况下,因为它们具有从右到左 的关联性,所以它们是从右到左求值的。所以首先表达式 --b ? b : (b = -99)
被评估为 -99
然后它被分配给 a
。
关于C++三元运算符混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21208115/