【发布时间】:2019-12-08 12:24:51
【问题描述】:
根据https://en.cppreference.com/w/cpp/language/zero_initialization
在文档提供的示例中:
std::string s; // is first zero-initialized to indeterminate value
// then default-initialized to ""
如果语法针对static T object;,为什么string s; 会发生零初始化?
为什么在默认初始化之前发生零初始化,为什么两者都允许发生?
零初始化的效果是:
- 如果 T 是标量类型,则对象的初始值为整数 常量零显式转换为 T。
- 如果 T 是非联合类 类型,所有基类和非静态数据成员都是 零初始化,并且所有填充都初始化为零位。这 构造函数(如果有)将被忽略。
- 如果 T 是联合类型,则第一个 非静态命名数据成员是零初始化的,所有填充都是 初始化为零位。
- 如果 T 是数组类型,则每个元素都是 零初始化
- 如果 T 是引用类型,则什么都不做。
如果我初始化string array[2] = {"Test1"}; 会怎样?我知道该数组将包含“Test1”和空字符串“”。
但是根据上面的文档,
如果T是数组类型,每个元素都是 零初始化
数据类型是对象/引用类型的字符串?
如果 T 是引用类型,则什么都不做。
什么都没做?我想也许会调用一个构造函数。肯定是空字符串吗?
【问题讨论】:
标签: c++ arrays initialization