如果我写
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)
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |