为什么我在MSVC上收到此警告?

时间:2012-07-28 16:42:10

标签: c++ visual-c++ boolean warnings compiler-warnings

bool image_manager::contains_image(const std::string& filename)
{
    return this->map_.count(filename);
}

现在我得到的警告是:

warning C4800: 'unsigned int' : forcing value to bool 'true' or 'false' (performance warning)

但是,因为std::map的count()方法的返回类型是:

  

1如果找到一个等于x的键的元素,否则为零。

因此它可以像布尔一样使用。那么为什么我会得到这个警告呢?在C ++中,整数基本上可以用于布尔检查吗?因此0 == false1 == true。那为什么编译器会给我一个警告?我也尝试使用这样的static_cast

return static_cast<bool>(this->map_.count(filename));

但我仍然收到警告。

2 个答案:

答案 0 :(得分:2)

通常,unsigned int不是bool,因此警告。尝试:

return this->map_.count(filename) > 0;

代替。

答案 1 :(得分:0)

size_type count ( const key_type& x ) const;
  

算术,无范围枚举,指针或指针的prvalue   成员类型可以转换为bool类型的prvalue。零值,   null指针值,或null成员指针值转换为   假;任何其他值都转换为true。一个类型的prvalue   std :: nullptr_t可以转换为bool类型的prvalue;该   结果值是假的。

标准程序格式正确,应该适用于支持标准的所有编译器。