【问题标题】:reducing errors using boolean arrays in C++在 C++ 中使用布尔数组减少错误
【发布时间】:2012-03-12 15:16:33
【问题描述】:

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

bool bool_var -> bool bool_var[SIZE]

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

if (bool_var) { ... }

可以返回“true”或“false”,同一行代码总是返回“true”,因为“bool_var”现在是指向数组的指针。这很容易出错,尤其是在复制大量变量时。

那么问题来了:有没有更不容易出错的做事方式?

我认为可行的解决方案:

  1. 用强类型枚举替换布尔类型(C++03 中的开销很大)。
  2. 一些编译器指令触发警告(我找不到......)。

有什么想法吗?

【问题讨论】:

  • @PlasmaHH: std::vector<bool> 应该小心处理,这是一个有一些陷阱的专业化。
  • @PlasmaHH,很遗憾 - 此应用程序不允许使用 std::vector。
  • @BjörnPollex:是的,它/可以/是一个专业化,但似乎没有一个可能的陷阱与他的问题有关。

标签: c++ enums boolean strong-typing


【解决方案1】:

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

【讨论】:

  • 看起来位集确实是要走的路,尤其是在具有最少可用依赖项的旧版本 C++ 上。
【解决方案2】:

如果您有 std::array,请使用它而不是普通数组:

#include <array>

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

给予:

test.cc:4:13:错误:初始化时无法将“std::array”转换为“bool”

【讨论】:

  • 你为什么要创建int类型的数组?
  • @BjörnPollex - 我只是展示了一个不能隐式转换为 bool 的一般示例。不过我会改的。
猜你喜欢
  • 2019-03-20
  • 2013-10-20
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多