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

问题描述 投票:0回答:4

当我尝试从文件中读取整数并使 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;
}
c++ integer boolean
4个回答
8
投票

怎么样

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

3
投票

你基本上想做的是:

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

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

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


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 ) );

此相关问题有您可能会觉得有用的其他讨论。

© www.soinside.com 2019 - 2024. All rights reserved.