一次函数调用会构建几次临时对象?

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

posted @ 2022-06-08 16:40  hellozhangjz  阅读(26)  评论(0编辑  收藏  举报