C++ 无法在简单打印中减去输出

C++ 无法在简单打印中减去输出,c++,printing,cout,c++17,C++,Printing,Cout,C++17,当我使用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 翻译为: cou

当我使用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 
翻译为:

cout.operator<<(a).operator<<(a--).operator<<(endl);
在这种情况下,语言不能保证将首先计算哪个参数。编译器可以自由选择对他们有意义的任何计算顺序。请注意,函数调用顺序是有保证的,但函数参数的求值顺序不是

如果您能够使用,则标准已更改为 翻译为:

cout.operator<<(a).operator<<(a--).operator<<(endl);
在这种情况下,语言不能保证将首先计算哪个参数。编译器可以自由选择对他们有意义的任何计算顺序。请注意,函数调用顺序是有保证的,但函数参数的求值顺序不是


如果您能够使用,则标准已更改为在使用运算符的C++17之前不保证计算顺序在使用运算符操作顺序的C++17之前不保证计算顺序。单行示例在实践中是一个坏主意,但我发现这是一个有趣的理论问题。在ubuntu 18.04上,g++v7.3.0 c++17报告:警告:“a”上的操作可能未定义[-Wsequence point],简单地说,通常假设事情按照操作顺序从左到右进行。单行示例在实践中是个坏主意,但我知道这是一个有趣的理论问题。在Ubuntu18.04上,g++v7.3.0 c++17报告:警告:“a”上的操作可能未定义[-Wsequence point]简单地说,通常假设cout中的东西从左到右。谢谢你的帮助。谢谢你的澄清,谢谢。链接很有用,谢谢。这个链接很有帮助