单步执行我在gdb中的程序,第108行返回到调用函数,并且不调用类A中的复制构造函数,就像(我认为)它应该:
template <class S> class A{
//etc...
A( const A & old ){
//do stuff...
}
//etc...
};
template <class T> class B{
//etc...
A<T> ReturnsAnA(){
A<T> result;
// do some stuff with result
return result; //line 108
}
//etc...
};
任何提示?我现在已经把头撞到墙上4个小时了,似乎无法想出这里发生的事情。
答案 0 :(得分:2)
(Named) return value optimization生效。您的复制构造函数将作为优化被删除(标准允许这样做,但会导致不同的行为)。
另见Understanding return value optimization and returning temporaries - C++。
(模板与此无关。)