【发布时间】:2017-02-01 09:02:42
【问题描述】:
我想知道如何初始化结构的 N 元素 std::array。
例子:
struct SomeStruct {
uint32_t * const entry1;
uint16_t * const entry2;
uint16_t * const entry3;
};
可以通过以下方式进行初始化:
static const std::array<SomeStruct , 2> arr
{nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
// nullptr just for example, would be addresses of real variables in the project
但这并不完全是我所需要的,因为以下语句在没有任何警告或其他内容的情况下也可以正常工作,因此元素默认初始化。
static const std::array<SomeStruct , 2> arr
{nullptr, nullptr, nullptr, nullptr};
我需要对编译器进行严格检查,是否所有元素都已初始化,语法如下:
static const std::array<SomeStruct , 2> arr
{{nullptr, nullptr, nullptr}, {nullptr, nullptr, nullptr}};
是否可以强制 C++ 检查是否要初始化 aggragte 类型的所有元素?
谢谢你!
【问题讨论】:
-
如果你这样做 aggregate initialization 你实际上可以让列表为 empty 并且所有元素都将被默认初始化。
-
为了澄清我之前的评论,编译器遵循 C++ 规范,它允许您在初始化中使用更少的成员或元素,并且不需要警告它。如果您想强制对所有元素和所有成员进行显式初始化,那么您可能应该使用一个静态分析器,它可以检测到这一点并给出警告。
-
你用的是什么编译器?你确定没有可选的警告吗?
标签: c++ c++11 initialization stdarray