Как влияет производительность на преобразование в bool в C ++? - PullRequest
44 голосов
/ 16 октября 2008

[Этот вопрос относится, но не совпадает с к этому .]

Мой компилятор предупреждает о неявном преобразовании или приведении определенных типов к типу bool, тогда как явные преобразования не выдают предупреждение:

long t = 0;
bool b = false;
b = t;                    // performance warning: forcing long to bool
b = (bool)t;              // performance warning
b = bool(t);              // performance warning
b = static_cast<bool>(t); // performance warning
b = t ? true : false;     // ok, no warning
b = t != 0;               // ok
b = !!t;                  // ok

Это с Visual C ++ 2008, но я подозреваю, что другие компиляторы могут иметь похожие предупреждения.

Итак, мой вопрос: каково влияние приведения / преобразования на bool на производительность? Имеет ли явное преобразование лучшую производительность в некоторых обстоятельствах (например, для определенных целевых архитектур или процессоров)? Неявное преобразование каким-то образом сбивает с толку оптимизатор?

Microsoft объяснение их предупреждения не особенно полезно. Они подразумевают, что есть веская причина, но не объясняют ее.

Ответы [ 11 ]

0 голосов
/ 16 октября 2008

Исходя из вашей ссылки на объяснение MS, получается, что, если значение равно просто 1 или 0, производительность не ухудшается, но если есть какие-либо другие не-0 значение, которое сравнение должно быть построено во время компиляции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...