在 C++ 中使用布尔数组减少错误
我正在研究许多布尔变量,现在将它们转换为布尔数组:
bool bool_var -> bool bool_var[SIZE]
这会导致容易出错的行为,因为如果以前:
if (bool_var) { ... }
可以返回“true”或“false”,则同一行代码始终返回“true” ”,因为“bool_var”现在是指向数组的指针。这是很容易出错的,尤其是在复制大量变量的情况下。
所以问题是:是否有一种不太容易出错的做事方式?
我认为可行的解决方案:
- 用强类型枚举替换布尔类型(C++03 中的开销很大)。
- 一些编译器指令触发警告(我找不到一个..)。
有什么想法吗?
I'm working on a number of boolean variables that I am now converting into boolean arrays:
bool bool_var -> bool bool_var[SIZE]
This leads to error prone behavior, since if previously:
if (bool_var) { ... }
could return both "true" or "false", this same line of code always returns "true", since "bool_var" is now a pointer to the array. This is quite error-prone, especially if one is duplicating a large number of variables.
So here's the question: is there a less error-prone way of doing things?
The solutions I thought could work:
- Replacing the boolean type with a strongly typed enum (large overhead in C++03).
- Some compiler directive to trigger a warning (I couldn't find one..).
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于您使用固定大小的数组,因此您应该使用
std::array
或boost::array
(如果您的系统中没有 C++11 支持)编译器。或者,您也可以考虑使用 std::bitset。Since you use arrays of a fixed size, you should use
std::array
, orboost::array
if you don't have C++11-support in your compiler. Alternatively you might also consider usingstd::bitset
.如果您有
std::array
使用它而不是普通数组:给出:
If you have
std::array
use that instead of a plain array:Gives: