用户定义的构造函数和隐式默认构造函数

平常我

我一直在阅读此页面,以了解值初始化的概念http://en.cppreference.com/w/cpp/language/value_initialization

值初始化的影响是:

  • 如果T是具有至少一个用户提供的任何类型的构造函数的类类型,则将调用默认构造函数。

但这似乎与其他资料直接矛盾,这说明如果至少存在一个用户定义的构造函数,则编译器不会生成隐式默认构造函数(不会编译类似“ T t;”的表达式)。欢迎任何解释。

史蒂夫·杰索普

在此上下文中,“默认构造函数”是指不能接受任何参数的构造函数(要么因为它没有参数,要么因为它只有可选参数)。

“隐式构造函数”是指自动为您生成的构造函数。这可以是一个无参数的构造函数,一个副本构造函数或(从C ++ 11开始)一个move构造函数。

因此,没有矛盾。如果T是具有用户提供的构造函数的类类型,则值初始化将调用默认构造函数。如果不存在(因为您定义了另一个构造函数,但没有no-args构造函数),或者它不可访问(因为您将其标记为私有或受保护,然后在无法使用此类函数的地方使用了它),则该值初始化格式错误,编译器将拒绝您的代码。如果已声明但从未定义,则该程序将不会链接。

由于C ++ 11,“默认”一词可能有点含糊,因为可以定义一个拷贝构造函数 = default;

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用户定义和默认构造函数?

来自分类Dev

从定义的副本构造函数调用默认(隐式)副本构造函数

来自分类Dev

隐式转换和复制构造函数

来自分类Dev

实例模拟和隐式构造函数

来自分类Dev

构造函数异常和隐式删除

来自分类Dev

用户提供的构造函数与显式默认的构造函数

来自分类Dev

隐式构造函数与“空”构造函数

来自分类Dev

默认(用户定义)构造函数和带有默认参数的构造函数之间的区别?

来自分类Dev

对于默认构造函数,未定义隐式超级构造函数Num()。必须定义一个显式构造函数,这背后的逻辑是什么

来自分类Dev

对于默认构造函数,未定义隐式超级构造函数Num()。必须定义一个显式构造函数,这背后的逻辑是什么

来自分类Dev

隐式与显式默认构造函数调用

来自分类Dev

C ++ 11:默认构造函数:隐式还是显式?

来自分类Dev

默认构造函数无法处理隐式超级构造函数引发的异常类型IOException。必须定义一个显式构造函数

来自分类Dev

构造函数隐式删除

来自分类Dev

默认和显式构造函数

来自分类Dev

C ++中隐式Default构造函数的默认值

来自分类Dev

C ++隐式默认构造函数的意义是什么?

来自分类Dev

为什么C ++隐式调用父默认构造函数?

来自分类Dev

C ++隐式默认构造函数的意义是什么?

来自分类Dev

AngelScript - 避免运行隐式默认构造函数

来自分类Dev

C ++隐式和显式继承构造函数调用

来自分类Dev

带有模板的用户定义运算符未调用隐式构造函数

来自分类Dev

默认构造函数无法处理隐式超级构造函数引发的异常类型SocketException

来自分类Dev

默认构造函数无法处理异常类型隐式超级构造函数引发的异常

来自分类Dev

复制构造函数隐式定义为Deleted的情况

来自分类Dev

错误:隐式声明的副本构造函数的定义

来自分类Dev

为什么带有用户声明的析构函数的类具有隐式默认构造函数?

来自分类Dev

当存在用户定义的析构函数时,如何禁用隐式定义的副本构造函数的生成

来自分类Dev

C ++构造函数和隐式字符串转换

Related 相关文章

  1. 1

    用户定义和默认构造函数?

  2. 2

    从定义的副本构造函数调用默认(隐式)副本构造函数

  3. 3

    隐式转换和复制构造函数

  4. 4

    实例模拟和隐式构造函数

  5. 5

    构造函数异常和隐式删除

  6. 6

    用户提供的构造函数与显式默认的构造函数

  7. 7

    隐式构造函数与“空”构造函数

  8. 8

    默认(用户定义)构造函数和带有默认参数的构造函数之间的区别?

  9. 9

    对于默认构造函数,未定义隐式超级构造函数Num()。必须定义一个显式构造函数,这背后的逻辑是什么

  10. 10

    对于默认构造函数,未定义隐式超级构造函数Num()。必须定义一个显式构造函数,这背后的逻辑是什么

  11. 11

    隐式与显式默认构造函数调用

  12. 12

    C ++ 11:默认构造函数:隐式还是显式?

  13. 13

    默认构造函数无法处理隐式超级构造函数引发的异常类型IOException。必须定义一个显式构造函数

  14. 14

    构造函数隐式删除

  15. 15

    默认和显式构造函数

  16. 16

    C ++中隐式Default构造函数的默认值

  17. 17

    C ++隐式默认构造函数的意义是什么?

  18. 18

    为什么C ++隐式调用父默认构造函数?

  19. 19

    C ++隐式默认构造函数的意义是什么?

  20. 20

    AngelScript - 避免运行隐式默认构造函数

  21. 21

    C ++隐式和显式继承构造函数调用

  22. 22

    带有模板的用户定义运算符未调用隐式构造函数

  23. 23

    默认构造函数无法处理隐式超级构造函数引发的异常类型SocketException

  24. 24

    默认构造函数无法处理异常类型隐式超级构造函数引发的异常

  25. 25

    复制构造函数隐式定义为Deleted的情况

  26. 26

    错误:隐式声明的副本构造函数的定义

  27. 27

    为什么带有用户声明的析构函数的类具有隐式默认构造函数?

  28. 28

    当存在用户定义的析构函数时,如何禁用隐式定义的副本构造函数的生成

  29. 29

    C ++构造函数和隐式字符串转换

热门标签

归档