通过默认构造函数初始化内置类型
在 C 中,默认构造函数由编译器为执行以下操作的类隐式定义:没有显式声明的构造函数。这个隐式默认构造函数会自动初始化内置类型的成员吗?
回答
不会,隐式定义的默认构造函数不会初始化内置类型的成员。但是,需要注意的是,类实例可以通过其他方式初始化。
值初始化与默认构造函数
通常假定语法为 C()调用默认构造函数。但是,在某些情况下,它会执行值初始化。如果用户声明的默认构造函数不存在,就会发生这种情况。值初始化直接初始化每个类成员,导致内置类型零初始化。
例如:
class C { public: int x; };
如果没有定义用户声明的构造函数,C()将使用值初始化:
C c; // c.x contains garbage
显式值初始化
使用 () 显式值初始化,如以下代码所示,将对 x 进行零初始化:
C c = C(); // c.x == 0 C *pc = new C(); // pc->x == 0
聚合初始化
聚合初始化也可以在不使用构造函数:
C c = {}; // C++98 C d{}; // C++11 // c.x == 0, d.x == 0
因此,虽然默认构造函数不会初始化内置成员类型,但 C 中存在替代初始化方法。
以上是C 的隐式默认构造函数是否初始化内置类型成员?的详细内容。更多信息请关注PHP中文网其他相关文章!