【发布时间】:2020-02-28 11:09:00
【问题描述】:
请告诉我为什么变量“y”的值显示为“5”,尽管我们给它赋值为 0。 请让我知道我的算法跟踪出了什么问题,导致我得到错误的 b = 1 和 c = 1 值; 谢谢大家
cout << boolalpha; // Outputs boolean values
// as true or false
bool res = false;
int y = 5;
res = 7 || (y = 0);
cout << "Result of (7 || (y = 0)): " << res
<< endl;
cout << "Value of y: " << y << endl;
int a, b, c;
a = b = c = 0;
res = ++a || ++b && ++c;
cout << '\n'
<< " res = " << res
<< ", a = " << a
<< ", b = " << b
<< ", c = " << c << endl ;
a = b = c = 0;
res = ++a && ++b || ++c;
cout << " res = " << res
<< ", a = " << a
<< ", b = " << b
<< ", c = " << c << endl ;
【问题讨论】:
-
您为什么认为
res = 7 || (y = 0);会将0分配给y?由于7,||的右侧永远不会被执行。 -
补充@t.niese 所说的,这通常称为short-circuit evaluation。 SO上已经有一些问题/答案可以解决这个问题。
-
我被左边的赋值运算符愚弄了,我一直认为它总是被评估。
标签: c++ variables runtime-error operators