当我尝试从文件中读取一个整数并使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;
}
答案 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还有其他有用的讨论。