bool image_manager::contains_image(const std::string& filename)
{
return this->map_.count(filename);
}
Теперь предупреждение, которое я получаю:Зачем мне это предупреждение на MSVC?
warning C4800: 'unsigned int' : forcing value to bool 'true' or 'false' (performance warning)
Однако, так как тип возвращаемого std::map
посчитает() метод:
1, если элемент с ключом, эквивалентным х является найдено, или ноль в противном случае.
Следовательно, его можно использовать в основном как логическое. Так почему именно я получаю это предупреждение? В C++ целые числа могут в основном использоваться для булевых проверок правильно? Следовательно, 0 == false
и 1 == true
. Так почему компилятор бросил мне предупреждение? Я также попытался с помощью static_cast
так:
return static_cast<bool>(this->map_.count(filename));
, но я все еще получаю предупреждение.
Я не сейчас _why_, но вы можете удалить предупреждение с помощью check ('return map_.count (filename)! = 0;'). –
Я предполагаю, что их bool не работает так же хорошо, как int. – chris
@chris, но я всегда думал, что 'bool' был просто перечислением или' typedef'ed 'int'. Что-то вроде 'enum bool {false = 0, true = 1};'? – ApprenticeHacker