我正在使用聚合初始化器为单元测试设置静态数据 block 。
我想使用数组大小作为预期的元素数量,但如果提供的初始化程序太少,这可能会失败:
my_struct_type expected[14] =
{
{ 1.234, 0, 'c' },
{ 3.141, 1, 'z' },
{ 2.718, 0, 'a' }
};
这在 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);
}
但是因为我没有 14 点的编译时保证,所以它从提供的值的 end of array 结束并进入默认初始化值。
我能否以某种方式在编译时强制执行聚合数组初始值设定项的数量?
最佳答案
实际上它不会运行到数组的末尾,因为编译器将默认初始化数组中您未自行初始化的所有元素。
如果你想确保你有特定数量的配置初始化器,我不知道该怎么做。
如果您只想确保数组是您拥有的项目数:
my_struct_type expected[] =
{
{ 1.234, 0, 'c' },
{ 3.141, 1, 'z' },
{ 2.718, 0, 'a' }
};
会成功的。然后只需使用 sizeof(expected)/sizeof(expected[0])
即可获取数组元素的总数。
关于c++ - 我可以在 "too few initializers"上导致编译错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3659839/