0
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::maps count() 方法的返回类型是:

如果找到具有等效于 x 的键的元素,则为 1,否则为零。

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

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

但我仍然收到警告。

4

2 回答 2

2

一般来说, anunsigned int不是 a bool,因此是警告。尝试:

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

反而。

于 2012-07-28T16:46:18.747 回答
0
size_type count ( const key_type& x ) const;

算术、无范围枚举、指针或指向成员类型的指针的纯右值可以转换为 bool 类型的纯右值。将零值、空指针值或空成员指针值转换为 false;任何其他值都将转换为 true。std::nullptr_t 类型的纯右值可以转换为 bool 类型的纯右值;结果值为假。

标准程序是格式良好的,并且应该适用于支持标准的所有编译器。

于 2012-07-28T16:47:35.437 回答