уменьшение ошибок с использованием логических массивов в C ++ - PullRequest
0 голосов
/ 22 февраля 2012

Я работаю над несколькими логическими переменными, которые сейчас преобразовываю в логические массивы:

bool bool_var -> bool bool_var[SIZE]

Это приводит к склонному к ошибкам поведению, так как если раньше:

if (bool_var) { ... }

может возвращать «true» или «false», эта же строка кода всегда возвращает «true», поскольку «bool_var» теперь является указателем на массив.Это довольно подвержено ошибкам, особенно если копируется большое количество переменных.

Итак, вот вопрос: Есть ли менее подверженный ошибкам способ делать вещи?

Решения, которые я думал, могли бы работать:

  1. Замена логического типа на строго типизированный enum (большие издержки в C ++ 03).
  2. Некоторая директива компиляторавызвать предупреждение (я не смог его найти ..).

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Если у вас есть 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
2 голосов
/ 22 февраля 2012

Поскольку вы используете массивы фиксированного размера, вы должны использовать std::array или boost::array, если в вашем компиляторе нет поддержки C ++ 11.В качестве альтернативы вы также можете рассмотреть возможность использования std::bitset.

...