3

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

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

(accessLV 是一个布尔数组,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

4 回答 4

8

怎么样

accessLV[i] = FileRead(file1, i + 1) != 0;
于 2009-05-30T01:56:48.477 回答
3

你想做的基本上是

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

于 2009-05-30T01:56:55.497 回答
2
accessLV[i] = FileRead(file1, i + 1) != 0;

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

于 2009-05-30T02:19:39.287 回答
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 ) );

这个相关问题有额外的讨论,您可能会觉得有用。

于 2009-05-30T02:45:23.493 回答