C++类类型的复制初始化

fok*_*oke 3 c++

如果我写

T t = T();
Run Code Online (Sandbox Code Playgroud)

T是一个班级.

我认为这是调用T的默认构造函数,然后是复制赋值运算符.但是允许编译器去除赋值.

我试图找到用C++标准编写的这种行为的描述,但我找不到它.你能指出我在标准中的正确位置吗?

我问这个是因为我被要求更换这个:

T t;
Run Code Online (Sandbox Code Playgroud)

T t = T();
Run Code Online (Sandbox Code Playgroud)

因为编码规则检查程序.

并且它发生了T类是不可复制的并且具有私有拷贝构造函数和拷贝赋值运算符......所以我想看到编译器在这种情况下实际上总是去掉副本.

编辑: 我被一些奇怪的东西误导了:非compyable类实际上是从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;
}
Run Code Online (Sandbox Code Playgroud)

以下不是:

class A
{
public:
    A() {}
    ~A() {}
private:
    A( const A& );
    const A& operator=( const A& );
};

int main( void )
{
    A a = A();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*sop 7

它是无法构建一个临时的,然后复制构造t,而不是复制分配它(8.5/14).

副本可以省略,但无论如何都必须可以访问(12.8/14-15)