Can I cause a compile error on quot;too few initializersquot;?(我可以在“初始化器太少上导致编译错误吗?)
问题描述
我正在使用聚合初始值设定项为单元测试设置静态数据块.
I am using an aggregate initializer to set up a block of static data for a unit test.
我想使用数组大小作为预期的元素数,但如果提供的初始值设定项太少,这可能会失败:
I would like to use the array size as the expected number of elements, but this can fail if too few initializers are provided:
my_struct_type expected[14] =
{
{ 1.234, 0, 'c' },
{ 3.141, 1, 'z' },
{ 2.718, 0, 'a' }
};
这不会在 Visual Studio 2008 中产生编译器错误.
This gives no compiler error in Visual Studio 2008.
我希望能够这样使用它:
I would like to be able to use it as such:
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 点的编译时保证,这会从 数组的末尾 提供的值的末尾运行到默认初始化的值中.
but because I don't have a compile-time guarantee of 14 points, this runs off the end of the array end of the provided values and into the default-initialized values.
我可以在编译时以某种方式强制执行聚合数组初始值设定项的数量吗?
Can I somehow enforce the number of aggregate array initializers at compile-time?
推荐答案
第一:可能会有警告.你试过在最高警告级别编译吗?
First: There might be a warning for this. Have you tried compiling at the highest warning level?
然后:如果交换哪个值是计算值和哪个是文字值,则可能会引发编译时错误:
Then: If you swap which value is calculated and which is literal, you could raise a compile-time error:
my_struct_type my_array[] = // <== note the empty []
{
{ 1.234, 0, 'c' },
{ 3.141, 1, 'z' },
{ 2.718, 0, 'a' }
};
BOOST_STATIC_ASSERT( sizeof(my_array)/sizeof(my_array[0]) == 14 );
这篇关于我可以在“初始化器太少"上导致编译错误吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:我可以在“初始化器太少"上导致编译错误吗?
基础教程推荐
- 从 std::cin 读取密码 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- Windows Media Foundation 录制音频 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01