gpt4 book ai didi

c++ - 我可以在 "too few initializers"上导致编译错误吗?

转载 作者:太空狗 更新时间:2023-10-29 19:50:12 25 4
gpt4 key购买 nike

我正在使用聚合初始化器为单元测试设置静态数据 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com