Cout减去简单打印中的输出

时间:2019-02-21 16:24:24

标签: c++ printing cout

当我使用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 

2 个答案:

答案 0 :(得分:3)

cout << a << a-- << endl; 

被翻译为:

cout.operator<<(a).operator<<(a--).operator<<(endl);

在这种情况下,该语言无法保证将首先评估哪个参数。编译器可以自由选择对他们有意义的评估顺序。请注意,可以保证函数调用顺序,但不能保证函数参数的求值顺序。

如果您可以使用,则<<运算符的标准已更改。这样可以保证评估顺序有意义,并且您将获得预期的结果。

答案 1 :(得分:1)

在C ++ 17之前,operator <<不能保证评估顺序,但是由于“ C ++ 17”,operator <<的顺序是从左到右。

有关更多详细信息,请参见eval_order