同样的代码,在msvc和gcc里面实现不同。
struct Test {
int a;
int b;
int c;
int d;
~Test(){
std::cout << "end" << std::endl;
}
};
Test getTest() {
Test sa;
sa.a = 1;
sa.b = 2;
sa.c = 3;
sa.d = 4;
return sa;
}
int main() {
Test t = getTest();
t.a = 2;
return 0;
}
gcc, 里面会把Test t当作参数rdi传入getTest().
而msvc会在Test t = getTest();这句话的时候,把getTest()frame[rbp于rsp]里面的数据复制到t所在的stack。
所以gcc只会打印一次end
而msvc会打印2次。