内置类型是否由 C 的默认构造函数初始化?
在 C 中,编译器生成的隐式默认构造函数是负责初始化类成员。但是,有一个常见的误解,认为此行为扩展到内置类型。
默认初始化行为
隐式默认构造函数不初始化内置类型的成员。当在没有用户定义的初始化的情况下使用此类构造函数时,内置类型的成员保持未初始化状态。
规则的例外
而默认构造函数通常不会初始化内置类型,在某些情况下可能会发生初始化:
Value初始化:
在 C 03 及更高版本中,语法 C() 调用类实例的值初始化。如果类没有用户声明的构造函数,则值初始化将对内置类型成员进行零初始化。
聚合初始化:
聚合初始化语法,例如 C c = {},在不使用构造函数的情况下执行初始化。这会导致内置类型成员的零初始化。
示例:
考虑以下没有用户声明的构造函数的类:
class C { public: int x; };
没有明确的初始化:
C c; // Compiler-provided default constructor used // c.x contains garbage
显式值初始化:
C c = C(); // Value-initialization used assert(c.x == 0);
聚合初始化:
C c = {}; // Aggregate initialization assert(c.x == 0);
需要注意的是,上述行为可能会因具体情况而异使用的C版本以及具体的类定义。
以上是C 的默认构造函数是否初始化内置类型?的详细内容。更多信息请关注PHP中文网其他相关文章!