0

在 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 个小时,似乎无法想出这里发生了什么。

4

1 回答 1

2

(命名)返回值优化生效。您的复制构造函数作为优化被删除(这是标准允许的,尽管会导致不同的行为)。

另请参阅了解返回值优化和返回临时对象 - C++

(模板与此无关。)

于 2010-04-17T06:53:08.767 回答