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

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

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

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

Я пытался использовать static_cast:

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

Но я все еще получаю предупреждение. Я пытался сделать это (я не уверен, точный термин):

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

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

Примечание: это синтаксис 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;
}

Ответы [ 4 ]

8 голосов
/ 30 мая 2009

Как насчет

accessLV[i] = FileRead(file1, i + 1) != 0;
3 голосов
/ 30 мая 2009

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

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

2 голосов
/ 30 мая 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 ) );

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

2 голосов
/ 30 мая 2009
accessLV[i] = FileRead(file1, i + 1) != 0;

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

...