我可以在"初始化程序太少"时导致编译错误吗?

msk*_*her 3 c++ compiler-errors aggregate initializer-list boost-test

我正在使用聚合初始化程序为单元测试设置一个静态数据块.

我想使用数组大小​​作为预期的元素数量,但如果提供的初始化程序太少,则可能会失败:

my_struct_type expected[14] =
{
    { 1.234, 0, 'c' },
    { 3.141, 1, 'z' },
    { 2.718, 0, 'a' }
};
Run Code Online (Sandbox Code Playgroud)

这在Visual Studio 2008中没有给出编译器错误.

我希望能够这样使用它:

const unsigned expected_size = sizeof(expected) / sizeof(my_struct_type);

BOOST_CHECK_EQUAL(points.size(), expected_size);

for( int i = 0; i < expected_size; i++ )
{
    BOOST_CHECK_EQUAL(points[i].value, expected[i].value);
    BOOST_CHECK_EQUAL(points[i].count, expected[i].count);
    BOOST_CHECK_EQUAL(points[i].sym,   expected[i].sym);
}
Run Code Online (Sandbox Code Playgroud)

但是因为我没有14点的编译时保证,所以它在所提供值的数组末尾和默认初始值之间运行.

我可以在编译时以某种方式强制执行聚合数组初始值设定项的数量吗?

Mar*_*k B 5

实际上它不会在数组的末尾运行,因为编译器会默认初始化你没有自己初始化的数组的所有元素.

如果您正在尝试确保您具有特定数量的已配置初始值设定项,我不确定如何执行此操作.

如果您只想确保数组是您拥有的项目数:

my_struct_type expected[] =
{
    { 1.234, 0, 'c' },
    { 3.141, 1, 'z' },
    { 2.718, 0, 'a' }
};
Run Code Online (Sandbox Code Playgroud)

会做的伎俩.然后sizeof(expected) / sizeof(expected[0])用来获取数组元素的总数.

  • 不是零初始化,而是使用默认初始值设定项. (2认同)