2012-02-22 1 views
0

Я работаю на ряде логических переменные, которые я теперь преобразовательным в булевы массивы:восстанавливающих ошибок с использованием логических массивов в C++

bool bool_var -> bool bool_var[SIZE] 

Это приводит к ошибкам склонного поведения, так как если ранее:

if (bool_var) { ... } 

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

Так что вот вопрос: есть ли менее подверженный ошибкам способ сделать что-то?

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

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

Любые идеи?

+0

использовать 'зОго :: VECTOR' – PlasmaHH

+1

@PlasmaHH:' зОго :: вектора 'РЕКОМЕНДУЕМЫХ будьте осторожны, это специализация, которая имеет некоторые подводные камни. –

+0

@PlasmaHH, к сожалению - использование std :: vector для данного приложения не допускается. – nbubis

ответ

2

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

+0

Похоже, что биты очень полезны, особенно в старых версиях C++ с минимальными доступными зависимостями. – nbubis

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 
+0

Почему вы создали массив типа 'int'? –

+0

@ BjörnPollex - Я просто показывал общий пример того, что он неявно конвертируется в 'bool'. Но я изменю его. – Flexo