Рассмотрим этот код:
#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
и -O3
, но результаты по-прежнему выглядят так, как задумано.