编译器添加到空类声明中的是什么?

时间:2010-04-17 20:18:20

标签: c++ class constructor class-design

假设,我写了

class A { };

编译器应提供(在需要时)

  
      
  1. 构造函数
  2.   
  3. 一个析构函数
  4.   
  5. 复制构造函数
  6.   
  7. = operator
  8.   

这是编译器提供的所有内容吗?此列表中是否有任何添加或删除?

5 个答案:

答案 0 :(得分:6)

完成了。但是你应该注意两点:

  1. 这是 copy =运算符。就像有一个 copy 构造函数一样,有一个 copy 赋值运算符。
  2. 仅在实际使用时提供。
  3. 对2的一些解释:

    struct A { private: A(); };
    struct B : A { };
    

    没关系!提供默认构造函数对于“B”来说是不正确的,因为它无法调用基类的构造函数。但是,如果实际需要,则仅提供默认构造函数(以及其他特殊函数)(我们说它是隐式定义的)。

答案 1 :(得分:2)

从 C++11 开始,除了您列出的内容

  • 移动角色
  • 移动赋值运算符

答案 2 :(得分:1)

您的清单已经完成。这就是它的全部内容。

答案 3 :(得分:0)

列表未完成............ 除了上面提到的四个属性外,还有一个地址运算符(&)重载方法,它返回调用对象的地址,也是由编译器自动提供的。

答案 4 :(得分:0)

有五个属性:

构造

复制构造函数

赋值运算符

参考运算符(&) - 地址