【发布时间】:2023-02-06 15:41:07
【问题描述】:
我有一个代码。代码打印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
}
【问题讨论】:
-
第一行已经是不可移植的 C++。其他编译器甚至可能不会编译这个
-
@463035818_is_not_a_number “不要”。其他编译器不编译这个。没有“可能”。特别是 MSVC。
-
具体关于
foo(i) + foo(i) + foo(i)部分;我相信它是便携式的。三个foo调用的计算顺序未指定,但代码经过安排,无论顺序如何,它都会产生相同的结果。这三个调用是等价的,因此哪个先调用或后调用都没有关系。