当我使用cout打印变量的值时,如果我在一行或两行中使用两个语句,则不会给出相同的答案。你能帮我吗?
int a= 5;
cout << a << endl;
cout << a-- << endl;
cout << a << a-- << endl;
// it gives me different answer, why?
//they are basically same thing
答案 0 :(得分:3)
cout << a << a-- << endl;
被翻译为:
cout.operator<<(a).operator<<(a--).operator<<(endl);
在这种情况下,该语言无法保证将首先评估哪个参数。编译器可以自由选择对他们有意义的评估顺序。请注意,可以保证函数调用顺序,但不能保证函数参数的求值顺序。
如果您可以使用c++17,则<<
运算符的标准已更改。这样可以保证评估顺序有意义,并且您将获得预期的结果。
答案 1 :(得分:1)
在C ++ 17之前,operator <<
不能保证评估顺序,但是由于“ C ++ 17”,operator <<
的顺序是从左到右。
有关更多详细信息,请参见eval_order。