【问题标题】:What does a compiler add to an empty class declaration?编译器在空类声明中添加了什么?
【发布时间】:2010-04-17 20:18:19
【问题描述】:

假设,我写

class A { };

编译器应该提供(根据需要)

  1. 构造函数
  2. 析构函数
  3. 复制构造函数
  4. = 运算符

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

【问题讨论】:

  • 我刚才遇到了这个老问题......为了将来的访问者的利益,可能值得一提的是,在 C++11 中,移动构造函数和移动赋值运算符是自动生成的除了以上内容。

标签: c++ class constructor class-design


【解决方案1】:

完成了。但有两点需要注意:

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

对2的一些解释:

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

没关系!提供默认构造函数对于“B”来说是错误的,因为它不能调用基类的构造函数。但是只有在实际需要时才提供默认构造函数(和其他特殊函数)(我们说它是隐式定义的)。

【讨论】:

  • 我猜你可能会争辩说,在空类的情况下,编译器还会添加至少一个字节的填充;-)
【解决方案2】:

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

  • 移动器
  • 移动赋值运算符

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        有五个属性:

        构造函数

        复制构造函数

        析构函数

        赋值运算符

        引用运算符(&) - 地址

        【讨论】:

          猜你喜欢
          • 2013-08-03
          • 1970-01-01
          • 1970-01-01
          • 2015-09-22
          • 2016-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-28
          相关资源
          最近更新 更多