swa*_*ang 1 c++ initialization
为什么标准决定在默认初始化期间不对非类类型成员执行任何操作,但在值初始化期间执行零初始化?
如果总是对非类类型成员执行零初始化会更安全吗?
该语言设计的基本原则之一是,您不应该为不需要的东西付费。如果您希望您的成员初始化,您可以要求编译器这样做,但如果您不希望那样,成本不会强加给您。
默认初始化只会初始化那些需要初始化的东西,即具有非平凡默认构造函数的成员,因为该构造函数旨在设置一些对对象很重要的不变量。请注意,区别不是类类型与基本类型,而是是否存在平凡的构造函数:
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
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1790 次 |
| 最近记录: |