使用C++ 11 std::array,我是否可以保证语法std::array<T, N> x;将默认初始化数组的所有元素?
编辑:如果没有,是否有一个语法可以在所有数组(包括零大小的数组)上工作,以将所有元素初始化为默认值?
编辑:在cppreference上,默认的构造函数描述说:
(constructor) (implicitly declared) (public member function)
default-constructs or copy-constructs every element of the array
Run Code Online (Sandbox Code Playgroud)
所以答案可能是肯定的.但我想根据标准或未来标准确定这一点.
我有一个这样声明的工会:
union
{
int all[4];
struct
{
int a, b, c, d;
};
};
Run Code Online (Sandbox Code Playgroud)
该点all阵列是单纯为了遍历所有4场简单。
为了使它更简单,我想用一个std::array<int, 4>. 那会让我接触鼻恶魔吗?
请考虑以下代码:
struct T {
int a;
union {
struct {
int a;
} s1;
struct {
char b[1024];
} s2;
};
};
int main() {
T x = T();
}
Run Code Online (Sandbox Code Playgroud)
由于调用了显式构造函数,上面的代码最终将零初始化为x中的所有数据成员.
但即使未调用显式,我也希望x初始化为零.要做到这一点,一个想法是在他们的声明中初始化数据成员,这对于T :: a来说似乎没问题.但是,如何使用相同的标准对联合占用的所有内存进行零初始化?
struct T {
int a = 0;
union {
struct {
int a;
} s1;
struct {
char b[1024];
} s2;
};
};
int main() {
T x; // I want x to be zero-initialized
}
Run Code Online (Sandbox Code Playgroud)