XCode的这里为什么没调用拷贝构造函数呢,是不是编译器作了什么优化
回答:
这种东西叫做返回值优化
返回值优化(Return value optimization,缩写为RVO)是C++的一项编译优化技术。即删除保持函数返回值的临时对象。这可能会省略两次复制构造函数,即使复制构造函数有副作用。
然后因为你的a是一个临时变量,并且没有做什么有意义的操作,有时编译器会优化掉这一句语句(A a = fun();),当然一般情况下编译器只会在用户开启优化的时候这么做。。
回答:
编译器做了NRVO(named return value optimization,具名返回值优化),所谓具名返回值优化,是指你像下面这样显式给出了返回值
A a;return a;
如果你写的是
return A();
那编译器做的就是RVO,二者大同小异。
具体做法如下:
编译器调整了函数的结构,把A a=fun();
中a
的引用作为fun
的参数,相当于有个函数void fun(A& a);
然后你调用fun(a);
在函数内调用a
的构造函数
void fun(A& a){
//调用a的构造函数
}
对象的构造分两个步骤,首先分配内存空间,然后调用构造函数,这里a
的内存是在fun
函数外被分配,而构造函数是在fun
函数内部调用。
以上是 XCode的这里为什么没调用拷贝构造函数呢,是不是编译器作了什么优化 的全部内容, 来源链接: utcz.com/p/193013.html