返回值优化

来源:互联网 发布:web前端软件 编辑:程序博客网 时间:2024/06/05 09:35

返回值优化的本质是编译器做了这样一件事情

我们的代码A do_something(){    A a;    ...    return a;}编译器这样做了A a;void do_something(A &a){    ...}



编译器在默认情况下,是开启了返回值优化的

struct A{A(){cout<<">>>1"<<endl;}A(const A& b){cout<<">>>2"<<endl;}A(A&&b){cout<<">>>3"<<endl;}~A() {cout<<"<<<"<<endl;}int a = 0;};A ret_A(){A a;return a;}A ret_A1() {        A a;        return std::move(a);}

int main() {A a = ret_A();}//输出>>>1<<<但是std::move会破坏返回值优化int main() {       A a = ret_A1();}>>>1>>>3<<<<<<

但是如果加上编译参数  -fno-elide-constructors 手动关闭返回值优化就会看到如下结果

int main() {        A a = ret_A();}>>>1>>>3<<<>>>3<<<<<<













原创粉丝点击