Почему принудительное использование int для проблем с производительностью? - PullRequest
1 голос
/ 29 апреля 2020

При компиляции на Windows компилятор выдает следующее предупреждение:

заставляет значение bool 'true' или 'false' (предупреждение о производительности)

It возникает, когда я делаю что-то вроде:

int a = ...
bool b = (a & (1 << 3);

Решение состоит в том, чтобы сделать:

bool b = (a & (1 << 3)) != 0;

или использовать int вместо bool.

Вопрос : почему в первом случае возникает проблема с производительностью, а не во втором? Кроме того, почему я не получаю предупреждение:

if (a & (1 << 3)) {
  ...
}

Потому что в этом случае значение преобразуется в bool, не так ли?

1 Ответ

3 голосов
/ 29 апреля 2020

Это предупреждение относится к устаревшему компилятору Visual Studio 2015, написанному с неверными словами в некотором контексте. Теперь это звучит более корректно

Неявное преобразование из int в bool. Возможная потеря информации

Предупреждение компилятора (уровень 4) C4800

...