[英]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 == false
和1 == 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.