mhd*_*mhd 6 c++ arrays initialization value-initialization
如果我有这样的代码
class Node {
public:
Node *subnodes[10];
};
Node x = Node();
Run Code Online (Sandbox Code Playgroud)
代码运行后是否有保证x->subnodes[0] == nullptr?
我不是 C++ 专家,我发现 C++ 规范令人生畏。这在实践中是可行的,但是规范是否保证在这种情况下将 nullptr 放入数组的每个元素中(而不是说,潜在的垃圾)?到目前为止,我还没有通过找到权威的规范语言来说服自己,并且在野外我看到很多代码示例似乎不相信这是真的。所以,经过一段时间未能想出答案后,我转向你, stack overflow。提前致谢。
是的,这是有保证的。
Node()构造一个临时对象并执行值初始化。结果,成员数组的所有元素都subnodes被零初始化为空指针。x从临时对象复制初始化,其成员也获得相同的初始化结果。(因为复制省略 x可能会直接进行值初始化,无论如何结果不会改变。)
如果 T 是一个具有既不是用户提供的也不是删除的默认构造函数的类类型(也就是说,它可能是一个具有隐式定义或默认默认构造函数的类),则该对象为零初始化,然后它是默认的 -如果它有一个重要的默认构造函数,则进行初始化;
和
零初始化的效果是:
- 如果 T 是标量类型,则对象的初始值是显式转换为 T 的整数常量零。
- 如果 T 是非联合类类型,则所有基类和非静态数据成员都初始化为零,并且所有填充都初始化为零位。构造函数(如果有)将被忽略。
- ...
- 如果 T 是数组类型,则每个元素都初始化为零。
- ...
顺便说一句:对于像这样的默认初始化Node x;,成员数组的元素将被初始化为不确定的值。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |