繁体   English   中英

“默认”构造函数是指“默认参数”还是“由 C++ 提供”?

[英]Does “default” constructor mean “default parameters” or “provided by C++”?

我对什么是“默认构造函数”感到困惑,因为我从我的 class 和在线都得到了两个含义。

1)我们自己写了一个构造函数,但是我们将参数设置为默认值。

2)我们根本没有编写任何构造,但我们仍然可以像我们一样“假装”并使用 C++ “提供的构造函数”初始化 class 的实例

如果情况是#2,初始化时会发生什么? 垃圾价值观?

谢谢!

[class.ctor]/4

class X默认构造函数是 class X的构造函数,其中每个不是 function 参数包的参数都有一个默认参数(包括没有参数的构造函数的情况)。 如果 class X没有用户声明的构造函数,则将不带参数的非显式构造函数隐式声明为默认构造函数 ([dcl.fct.def])。 隐式声明的默认构造函数是其 class 的inline public成员。

如果您不提供任何构造函数,那么 C++ 将合成一个(可能已删除)默认构造函数。 此合成构造函数的语义在[class.ctor]/7中指定:

默认构造函数默认且未定义为已删除的默认构造函数在用于创建其 class 类型 ([intro.object]) 的 object 或在其第一次声明后显式默认时被隐式定义 隐式定义的默认构造函数执行 class 的一组初始化,这将由用户编写的 class 的默认构造函数执行,没有ctor-initializer和一个空的复合语句 如果该用户编写的默认构造函数格式不正确,则程序格式错误。 如果该用户编写的默认构造函数满足 constexpr 构造函数的要求,则隐式定义的默认构造函数是constexpr 在隐式定义 class 的默认默认构造函数之前,应隐式定义其基类及其非静态数据成员的所有非用户提供的默认构造函数。 [注意:隐式声明的默认构造函数具有异常规范([except.spec])。 显式默认定义可能具有隐式异常规范,请参阅 [dcl.fct.def]。 ——尾注]

因此,是的,数据成员将在没有类内成员初始化器的情况下默认初始化。 这会使内置类型的成员未初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM