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::mapただし、 s count()メソッドの戻りタイプは次のとおりです。

xと同等のキーを持つ要素が見つかった場合は1、それ以外の場合は0。

したがって、ブール値のように使用できます。では、なぜこの警告が表示されるのですか?C ++では、整数は基本的にブールチェックに使用できますか?したがって0 == false1 == true。では、なぜコンパイラーは私に警告をスローするのですか?私もこのようなものを使ってstatic_castみました:

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

しかし、私はまだ警告を受けています。

4

2 に答える 2

2

一般に、anunsigned intはではないboolため、警告です。試す:

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

代わりは。

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

算術、スコープなしの列挙、ポインター、またはメンバー型へのポインターのprvalueは、bool型のprvalueに変換できます。ゼロ値、ヌルポインター値、またはヌルメンバーポインター値はfalseに変換されます。その他の値はすべてtrueに変換されます。std :: nullptr_t型のprvalueは、bool型のprvalueに変換できます。結果の値はfalseです。

標準プログラムでは整形式であり、標準をサポートするすべてのコンパイラで動作するはずです。

于 2012-07-28T16:47:35.437 に答える