如果我写
T t = T();
T 是一个类。
我认为这是调用 T 的默认构造函数,然后是复制赋值运算符。 但是允许编译器摆脱赋值。
我试图找到用 C++ 标准编写的对这种行为的描述,但找不到。 你能指出标准中的正确位置吗?
我问这个是因为我被要求替换这个:
T t;
与
T t = T();
因为编码规则检查程序。
碰巧 T 类是不可复制的,并且有一个私有(private)的复制构造函数和复制赋值运算符...... 所以我希望看到编译器在这种情况下总是有效地摆脱拷贝。
编辑: 我被一些奇怪的东西误导了: noncompyable 类实际上继承自 boost::noncopyable 在这种情况下,它确实可以编译。 但是,如果我将复制构造函数和复制赋值运算符声明为私有(private),则它不会编译。 例子。这编译:
class BA
{
protected:
BA() {}
~BA() {}
private:
BA( const BA& );
const BA& operator=( const BA& );
};
class A : BA
{
};
int main( void )
{
A a = A();
return 0;
}
下面的不是:
class A
{
public:
A() {}
~A() {}
private:
A( const A& );
const A& operator=( const A& );
};
int main( void )
{
A a = A();
return 0;
}
最佳答案
构造一个临时变量然后将构造复制到 t
,而不是复制分配它 (8.5/14)。
复制构造函数可以省略,但无论如何都必须可以访问 (12.8/14-15)
关于C++ 类类型复制初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6523624/