【问题标题】:invalid operands of types ‘double’ snd const char [3]’ to binary 'operator<<''double' snd const char [3]' 类型的无效操作数到二进制 'operator<<'
【发布时间】:2014-02-24 01:46:16
【问题描述】:

这是我尝试构建时收到的错误消息:

'double' snd const char [3]' 类型的无效操作数到二进制'operator

显然我对此很陌生。任何帮助,将不胜感激。

代码如下:

 #include <iostream>
 using namespace std;


 int main () 
 {
     double x = 3;
     double y = 4;

     cout << "(" << x = y++ << ", " << y << ")" << endl;
     cout << "(" << x = ++y << ", " << y << ")" << endl;
     cout << "(" << x = y-- << ", " << y << ")" << endl;
     cout << "(" << x = --y << ", " << y << ")" << endl;

         return 0;
 }

【问题讨论】:

  • 你需要括号:cout &lt;&lt; "(" &lt;&lt; (x = y++) &lt;&lt; ", " &lt;&lt; y &lt;&lt; ")" &lt;&lt; endl;

标签: c++ increment decrement


【解决方案1】:

=的优先级低于&lt;&lt;,改为:

std::cout << "(" << (x = y++) << ", " << y << ")" << std::endl;
//                  ^       ^

C++ Operator Precedence

【讨论】:

    【解决方案2】:

    Assignment (=) 的 precedence 低于 shift (&lt;&lt;),因此您需要括号来获得您期望的含义:

    cout << "(" << (x = y++) << ", " << y << ")" << endl;
                   ^       ^
    

    但是您不应该编写具有多个副作用的代码,例如:未指定操作数的评估顺序,并且这种事情很容易导致未定义的行为。保持代码简单,一次只做一件事。

    【讨论】:

      猜你喜欢
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多