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 == false
和1 == true
。那为什么编译器会给我一个警告?我也尝试使用这样的static_cast
:
return static_cast<bool>(this->map_.count(filename));
但我仍然收到警告。
答案 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;该 结果值是假的。
标准程序格式正确,应该适用于支持标准的所有编译器。