gpt4 book ai didi

c++ - 如何保护数组定义免受非零值初始化不完整的影响?

转载 作者:可可西里 更新时间:2023-11-01 16:31:08 25 4
gpt4 key购买 nike

我有一个全局数组,它由一个枚举的值索引,它有一个代表值数量的元素。该数组必须由一个特殊值初始化,不幸的是它不是 0。

enum {
A, B, C, COUNT
};

extern const int arr[COUNT];

在 .cpp 文件中:

const int arr[COUNT] = { -1, -1, -1 };

枚举偶尔会发生变化:添加新值,删除一些值。我刚刚修复的代码中的错误是初始化值的数量不足,这导致数组的其余部分被初始化为零。我想防止这种错误。

问题是要么保证 arr 总是用特殊值(示例中的 -1)完全初始化,要么中断编译以获取开发人员注意,所以数组可以手动更新。

最新的 C++ 标准不可用(旧的 ms 编译器和一些专有的垃圾)。在一定程度上可以使用模板。强烈禁止使用 STL 和 Boost(不要问),但我不介意复制或重新实现所需的部分。

如果事实证明这是不可能的,我将不得不考虑将特殊值更改为 0,但我想避免这种情况:特殊值(-1)可能是有点太特殊了,在代码的其余部分隐式编码。

我想避免 DSL 和代码生成:主要构建系统在 ms windows 上卡住,主要的 PITA 在那里生成任何东西。

最佳答案

我能想到的最好的解决方案是用 arr[] 替换 arr[COUNT],然后编写一个模板来断言 sizeof( arr)/sizeof(int) == 计数。这不能确保将其初始化为 -1,但可以确保您已使用正确数量的元素显式初始化数组。

C++11 的 static_assert 或 Boost 的宏版本会更好,但如果两者都没有,则必须自己想出一些东西。

关于c++ - 如何保护数组定义免受非零值初始化不完整的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16947908/

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