C++构造函数、拷贝构造函数、赋值运算符漫谈(三)——NRV

  • 时间:
  • 浏览:2

首先看下面一段进程:

以上有另一个 多运行结果截图分别来自VSg++

    都看你这个输出,相信不少人和我一样有疑惑:为那此越来越调用拷贝构造函数?在回答你这个大大问题然后,人们歌词 歌词 先除理另外有另一个 多大大问题——使用“=”创建的对象就一定要调用拷贝构造函数吗?

Named Return value 优化:

     从运行结果来看与否定的,在创建x1,x2的然后,人们歌词 歌词 的预想是编译器先创建有另一个 多临时对象,在使用临时对象作为拷贝构造函数的参数创建新对象。其实这里编译器采用了本身优化,叫做Named Return Value(NRV)。

为那此可不后能 定义了拷贝构造函数不能进行nrv优化?首先它是lippmaninside c++ object mode里说的。那个预先取之,必先有之的说法就是我我的思考。查阅资料,实际上你这个将会仅仅就是我cfont开启NRV优化的有另一个 多开关。 

The C++ standard allows the elision of the copy constructor (even if this results in different program behavior), which has a side effect of enabling the compiler to treat both objects as one。也就是我是我不好的副作用,c++标准允许你这个副作用的再次冒出,也就是我它允许进行NRV优化,但全是可不后能 。 

nrv优化的本质是优化掉拷贝构造函数,加进它全是生成它。当然了,将会为了优化掉它,前提就是我它占据 ,也就是我欲先去之,必先有之,你这个也就是我nrv优化可不后能 有拷贝构造函数占据 的是因为着。 nrv优化会带来副作用,目前也全是正式标准,倒是那个对象模型上举的应用例子看看比较好。极端情況下,不需要它的确造成很大的性能损失,知道你这个情況就还可不后能 了。