在C ++中使用布尔数组减少错误

时间:2012-02-22 09:40:53

标签: c++ enums boolean strong-typing

我正在处理一些布尔变量,我现在正在转换为布尔数组:

bool bool_var -> bool bool_var[SIZE]

这会导致容易出错的行为,因为如果之前:

if (bool_var) { ... }

可以返回“true”或“false”,同一行代码总是返回“true”,因为“bool_var”现在是指向数组的指针。这非常容易出错,特别是如果有人复制了大量变量。

所以这就是问题:是否有一种不易出错的做事方式?

我认为可以解决的解决方案:

  1. 用强类型枚举替换布尔类型(C ++ 03中的大量开销)。
  2. 一些触发警告的编译器指令(我找不到一个..)。
  3. 有什么想法吗?

2 个答案:

答案 0 :(得分:2)

由于您使用的是固定大小的数组,因此如果您的编译器中没有C ++ 11支持,则应使用std::arrayboost::array。或者,您也可以考虑使用std::bitset

答案 1 :(得分:2)

如果您使用std::array而不是普通数组:

#include <array>

std::array<bool,20> test;
bool fail = test;

给出:

test.cc:4:13: error: cannot convert 'std::array' to 'bool' in initialization