Sof*_*e_t 4 c++ templates copy-constructor
当需要复制构造函数时,我有点不确定.例如,给定此功能:
template<class T>
T max(const T* array, int size) {
    T result = array[0];
    for (int i = 1; i < size; ++i) {
        if (result < array[i]) {
            result = array[i];
        }
    }
    return result;
}
我需要该类型的复制构造函数的原因是什么T?我认为一定是因为我们以价值回报.这行T result = array[0];还需要复制构造函数吗?
我需要
copy constructor这种类型的原因是什么T?
T result = array[0];
这称为复制初始化,并调用该类型的复制构造函数T.Type T将需要此行的复制构造函数才能成功.
我认为这是必须,因为我们通过一个返回值,所以我们需要
copy constructor的T类型.
return result;
在大多数情况下,您的假设对于返回值是正确的.但是,在这种情况下,不必定义复制构造函数.要实现移动语义,您可以实现一个移动构造函数,它将不再需要复制构造函数,因为局部变量result将被"移动"而不是"复制".移动语义从函数返回时不需要大型对象的不必要副本,因为在函数返回后将无法访问这些大对象.