为什么我们需要一个用户提供的const对象构造函数?

模板男孩

该语言的规则表示const,用户定义类的定义需要进行值初始化或具有用户提供的默认构造函数。

const struct X { int v; } x;

如果您不给它一个,那么您将永远无法给它一个v值,因为它不能被突变。但是我们将如何从用户提供的如下构造函数中受益:

const struct X { X() {} int v; } x;

这仍将是默认构造v,这将使其保持未初始化状态。当没有没有构造器没有好处的时候,为什么我们需要这个构造器来进行编译?

迈克·西摩

在第一种情况下,编译器仅从类定义(而不是任何成员的定义)中就可以知道变量不会被初始化。必须使用类定义才能定义变量,因此很容易陈述一个规则,说如果const在这种情况下未初始化变量,则程序格式错误。

在第二个中,将需要用户声明的构造函数的定义来确定是否初始化它。当编译器处理变量定义时,这不一定可用,因此,通常它无法检查构造函数是否初始化了所有东西。构造函数定义不一定可用。通常,即使在这样的情况下也不需要诊断,在这种情况下,构造函数的定义可用,编译器可以解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

来自分类Dev

为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

来自分类Dev

为什么我们需要创建一个one-arg构造函数才能使用临时的无名对象?

来自分类Dev

在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

来自分类Dev

为什么我们只有一个带有@Inject批注的构造函数?

来自分类Dev

为什么我们需要在React Hook中返回一个函数?

来自分类Dev

当我们为一个类的对象分配一个整数值时,为什么要调用参数化构造函数?

来自分类Dev

Outputstream是一个抽象类,因此我们无法实例化它。为什么为Outputstream类提供了默认构造函数?

来自分类Dev

为什么我们需要一个扫描器对象来在 java 中获取输入

来自分类Dev

Scala集合:为什么我们需要一个case语句来提取高阶函数中的值元组?

来自分类Dev

当我们有一个红色区域时,为什么我们需要堆栈分配?

来自分类Dev

当我们有一个红色区域时,为什么我们需要堆栈分配?

来自分类Dev

JavaScript-为什么我们必须从自调用函数返回一个函数?

来自分类Dev

为什么我们需要为守护程序创建一个新会话?

来自分类常见问题

为什么我们需要argc而argv末尾总是有一个null?

来自分类Dev

为什么我们需要一个servlet名称?

来自分类Dev

为什么我们需要一个恒定的时间*单字节*比较功能?

来自分类Dev

Android:为什么我们需要一个IBinder来使Messenger与Handler通信?

来自分类Dev

为什么我们需要另一个模式来进行模式缝合?

来自分类Dev

Java LRUCache,为什么我们需要另一个集合

来自分类Dev

我们为什么要创建一个新的 kafka 用户?

来自分类Dev

我们可以从const对象中引用一个setter成员函数作为const吗?

来自分类Dev

为什么`std :: pair <int,movable>`需要一个[deleted]`const&`复制构造函数?

来自分类Dev

为什么我们需要在MSIL中显式调用父构造函数?

来自分类Dev

为什么我们需要这种特殊类型的构造函数?

来自分类Dev

为什么我们需要在JavaScript中定义构造函数

来自分类Dev

为什么我们需要在实体中声明非空构造函数?

来自分类Dev

我们可以在另一个类的构造函数的帮助下初始化对象吗?

来自分类Dev

我们可以在另一个类的构造函数的帮助下初始化对象吗?

Related 相关文章

  1. 1

    为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

  2. 2

    为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

  3. 3

    为什么我们需要创建一个one-arg构造函数才能使用临时的无名对象?

  4. 4

    在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

  5. 5

    为什么我们只有一个带有@Inject批注的构造函数?

  6. 6

    为什么我们需要在React Hook中返回一个函数?

  7. 7

    当我们为一个类的对象分配一个整数值时,为什么要调用参数化构造函数?

  8. 8

    Outputstream是一个抽象类,因此我们无法实例化它。为什么为Outputstream类提供了默认构造函数?

  9. 9

    为什么我们需要一个扫描器对象来在 java 中获取输入

  10. 10

    Scala集合:为什么我们需要一个case语句来提取高阶函数中的值元组?

  11. 11

    当我们有一个红色区域时,为什么我们需要堆栈分配?

  12. 12

    当我们有一个红色区域时,为什么我们需要堆栈分配?

  13. 13

    JavaScript-为什么我们必须从自调用函数返回一个函数?

  14. 14

    为什么我们需要为守护程序创建一个新会话?

  15. 15

    为什么我们需要argc而argv末尾总是有一个null?

  16. 16

    为什么我们需要一个servlet名称?

  17. 17

    为什么我们需要一个恒定的时间*单字节*比较功能?

  18. 18

    Android:为什么我们需要一个IBinder来使Messenger与Handler通信?

  19. 19

    为什么我们需要另一个模式来进行模式缝合?

  20. 20

    Java LRUCache,为什么我们需要另一个集合

  21. 21

    我们为什么要创建一个新的 kafka 用户?

  22. 22

    我们可以从const对象中引用一个setter成员函数作为const吗?

  23. 23

    为什么`std :: pair <int,movable>`需要一个[deleted]`const&`复制构造函数?

  24. 24

    为什么我们需要在MSIL中显式调用父构造函数?

  25. 25

    为什么我们需要这种特殊类型的构造函数?

  26. 26

    为什么我们需要在JavaScript中定义构造函数

  27. 27

    为什么我们需要在实体中声明非空构造函数?

  28. 28

    我们可以在另一个类的构造函数的帮助下初始化对象吗?

  29. 29

    我们可以在另一个类的构造函数的帮助下初始化对象吗?

热门标签

归档