输出取决于编译器吗?

mas*_*cai -2 c++ c++17

我有一个代码。代码打印1236(g++ 7.5.0)

输出取决于编译器吗?(例如输出可以是3216

#include <bits/stdc++.h>


using namespace std;


int foo(int& x) {
    std::cout << ++x; 
    return x;
}


int main() {
    int i = 0;
    cout << foo(i) + foo(i) + foo(i) << endl; // 1236
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ing 7

不,输出不依赖于编译器(对bits/stdc++.h废话取模)。三个调用的求值顺序foo(i)未指定,但这不会影响输出:函数调用不是交错的,因此某些调用将递增i到 1,打印该值并返回它(作为副本,然后是其中之一另外两个将分配、打印并返回 2,然后最后一个将执行 3,并且它们的返回值总和将始终为 6。

\n

请注意,如果foo返回int&,最后的输出可能是任何数字 6\xe2\x80\x939,因为实现可能不会选择i在返回时立即读取加法。不过,该行为仍将被定义,因为这些读取将相对于任何写入进行不确定的排序。

\n


归档时间:

查看次数:

102 次

最近记录:

2 年,9 月 前