考虑这段代码:
#include <iostream>
struct Test
{
int x;
int y;
};
Test func(const Test& in)
{
Test out;
out.x=in.y;
out.y=in.x;
return out;
}
int main()
{
Test test{1,2};
std::cout << "x: " << test.x << ", y: " << test.y << "\n";
test=func(test);
std::cout << "x: " << test.x << ", y: " << test.y << "\n";
}
人们会期望这样的输出:
x: 1, y: 2
x: 2, y: 1
这确实是我得到的。但是由于复制省略,可能out
与内存中的最后一行输出位于同一位置in
并导致输出为x: 2, y: 2
?
我试过用 gcc 和 clang 编译-O0
and -O3
,结果仍然看起来像预期的那样。