为什么标准决定在 default initialization 期间对非类类型成员不做任何事情但执行zero initialization在value initialization期间?
如果始终对非 clss 类型成员执行零初始化会更安全吗?
最佳答案
语言设计的基本原则之一是您不应该为不需要的东西付费。如果您希望初始化您的成员,您可以要求编译器这样做,但如果您不希望这样做,则不会将成本强加给您。
默认初始化只会初始化那些需要初始化的东西,即具有非平凡默认构造函数的成员,因为该构造函数旨在设置一些对物体。请注意,区别不是类类型与基本类型,而是是否存在普通构造函数:
struct POD { int a; int b; int c; };
struct V { virtual void f(); };
struct Type {
std::string str; // default initialization calls default constructor
V obj; // " calls default constructor: vptr must be set
POD pod; // default initialization leaves this untouched
};
关于c++ - 为什么 C++ 默认初始化不对非类类型成员进行零初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19235864/