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

发布于 2025-01-08 12:44:33 字数 435 浏览 0 评论 0原文

我正在研究许多布尔变量,现在将它们转换为布尔数组:

bool bool_var -> bool bool_var[SIZE]

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

if (bool_var) { ... }

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

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

我认为可行的解决方案:

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

有什么想法吗?

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:

  1. Replacing the boolean type with a strongly typed enum (large overhead in C++03).
  2. Some compiler directive to trigger a warning (I couldn't find one..).

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我早已燃尽 2025-01-15 12:44:33

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

Since you use arrays of a fixed size, you should use std::array, or boost::array if you don't have C++11-support in your compiler. Alternatively you might also consider using std::bitset.

故乡的云 2025-01-15 12:44:33

如果您有 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

If you have std::array use that instead of a plain array:

#include <array>

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

Gives:

test.cc:4:13: error: cannot convert 'std::array' to 'bool' in initialization
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文