Как я могу исправить предупреждение int-to-bool в C ++?

Я получаю предупреждение в MSVC ++, когда пытаюсь прочитать целое число из файла и сделать его равным переменной типа bool.

accessLV[i] = FileRead(file1, i + 1);

(accessLV - это массив логических значений, FileRead - это функция, которую я сделал для уменьшения синтаксиса, используемого при чтении из файла, i - потому что оператор находится внутри цикла for)

Я пробовал использовать static_cast:

accessLV[i] = static_cast<bool>(FileRead(file1, i + 1));

Но я все равно получаю предупреждение. Я пробовал это делать (не знаю точного термина):

accessLV[i] = (bool)FileRead(file1, i + 1));

И предупреждение все еще присутствует. Есть ли способ избавиться от предупреждения, не превращая accessLV в массив целых чисел?

NB: это синтаксис FileRead, если он помогает:

int FileRead(std::fstream& file, int pos)
{
    int data;
    file.seekg(file.beg + pos * sizeof(int));
    file.read(reinterpret_cast<char*>(&data), sizeof(data));
    return data;
}

person Community    schedule 30.05.2009    source источник


Ответы (4)


Как насчет

accessLV[i] = FileRead(file1, i + 1) != 0;
person Dave    schedule 30.05.2009
comment
Дополнительный набор () не сбился бы с пути только для того, чтобы показать, где находится приоритет! - person Richard Corden; 01.06.2009

То, что вы хотите сделать, в основном

accessLV [i] = (FileRead (file1, i + 1)! = 0)

person leiz    schedule 30.05.2009

accessLV[i] = FileRead(file1, i + 1) != 0;

Выше вы выполняли приведение от int к bool: если вы используете это, результат сравнения помещается в accessLV [i], поэтому предупреждения типа не возникают.

person Nathaniel Flath    schedule 30.05.2009

Как предлагали другие плакаты, !=0 - это то, что вам нужно. Я предпочитаю такую ​​оболочку, потому что считаю ее более читаемой:

// myutil.hpp
template< typename T >
inline bool bool_cast( const T & t ) { return t != 0; }

Что бы вы использовали в этом случае следующим образом:

// yourcode.cpp
accessLV[ i ] = bool_cast( FileRead( file1, i + 1 ) );

Этот связанный вопрос требует дополнительного обсуждения, которое вы могли бы найти полезным.

person jwfearn    schedule 30.05.2009