【问题标题】:Why displayed value of b , c and y is different from my trace?为什么 b 、 c 和 y 的显示值与我的轨迹不同?
【发布时间】: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


【解决方案1】:

cppreference.com - Logical operators:

内置运算符 &amp;&amp;|| 执行短路计算(如果在计算第一个操作数后知道结果,则不计算第二个操作数),但是重载运算符的行为类似于常规函数调用,并且总是计算两个操作数

所以对于res = 7 || (y = 0),其中|| 是一个内置运算符,7 || (y = 0) 的结果在7 被评估后是已知的,因此(y = 0) 不会被评估。

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多