簡體   English   中英

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

[英]Why do I get this warning on MSVC?

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()方法的返回類型是:

如果找到具有等效於x的鍵的元素,則為1,否則為零。

因此它可以像布爾一樣使用。 那么為什么我會得到這個警告呢? 在C ++中,整數基本上可以用於布爾檢查嗎? 因此0 == false1 == true 那為什么編譯器會給我一個警告? 我也試過像這樣使用static_cast

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

但我仍然收到警告。

通常, unsigned int不是bool ,因此是警告。 嘗試:

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

代替。

size_type count ( const key_type& x ) const;

算術,無范圍枚舉,指針或指向成員類型的指針的prvalue可以轉換為bool類型的prvalue。 零值,空指針值或空成員指針值轉換為false; 任何其他值都轉換為true。 類型為std :: nullptr_t的prvalue可以轉換為bool類型的prvalue; 結果值為false。

標准程序是完善的,應該適用於支持標准的所有編譯器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM