struct Test
{
Test(){cout << "默认\n";}
Test(Test &&) {cout << "移动\n"; };
Test & operator=(Test &&) {cout << "赋值\n"; return *this;}
};
Test func()
{
return Test();
}
int main()
{
Test t;
t = func();
return 0;
}
输出结果为:默认,默认,移动,赋值。也就是说func函数内部的Test()创建的临时变量(作用域在func::)会使用移动构造函数初始化func()函数的返回值(作用域在main::)。
编译需要禁止返回值优化,加选项-fno-elide-constructors
。