此常见问题解答涉及聚合和POD,并涵盖以下材料:
根据cppreference,std::array构造函数在std::array创建时执行默认初始化.但是,当我在Visual Studio 12.0中进行一些测试时,在某些情况下std::array似乎正在执行值初始化.
std::array<int, 3> arr1; // gives me some garbage values, as expected
auto arr2 = std::array<int, 3>(); // gives me three 0, value-initialize?
Run Code Online (Sandbox Code Playgroud)
此外,当它std::array是类的成员时,有时它具有不确定的值,而有时它全部为零.
class Container {
public:
Container() ...
int& operator[](size_t i) { return arr[i]; }
size_t size() { return ARR_SIZE; }
private:
static const size_t ARR_SIZE = 3;
std::array<int, ARR_SIZE> arr;
};
Run Code Online (Sandbox Code Playgroud)
如果构造函数未显式定义或arr不在成员初始arr值设定项列表中,则包含不确定的值.
Container() {} // arr has indeterminate values, same for …Run Code Online (Sandbox Code Playgroud)