如何在C ++中修复int-to-bool警告?

时间:2009-05-30 01:53:09

标签: c++ integer boolean

当我尝试从文件中读取一个整数并使bool变量等于它时,我在MSVC ++中收到警告。

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

(accessLV是一个bool数组,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 个答案:

答案 0 :(得分:8)

怎么样

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

答案 1 :(得分:3)

你想要做的基本上是

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

答案 2 :(得分:2)

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

上面,你是从int转换为bool:如果你使用它,比较的结果放在accessLV [i]中,所以不会出现类型警告。

答案 3 :(得分:2)

正如其他海报所说,!=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 ) );

This related question还有其他有用的讨论。