关于NRV优化的问题
在看Inside C++ Object Model
2.3,候捷的译本是67页,没有影印的,大致也在附近
代码:
class test {
friend test foo( double );
public:
test()
{ memset( array, 0, 100*sizeof( double )); }
private:
double array[ 100 ];
};
test foo( double val )
{
test local;
local.array[ 0 ] = val;
local.array[ 99 ] = val;
return local;
}
int main()
{
for ( int cnt = 0; cnt < 10000000; cnt++ )
{ test t = foo( double( cnt ) ); }
return 0;
}
书上说要加上一个copy ctor才能激活NRV优化,为什么呢?
我觉得没有copy ctor的时候,这个类没有什么virtual func之类的东西
所以编译器产生的copy ctor是trivial的
编译器更可以大胆地把一次copy ctor和dtor优化掉
而若是有显式的copy ctor的话
编译器若是优化掉了有可能改变程序的语义
所以我觉得应该是没有copy ctor的时候肯定要NRV优化掉
而有copy ctor的时候在max opt时打开NRV优化
并且设置一个编译选项使程序员可以禁止掉NRV优化
ps:我上面提到的那个编译选项有么?