[Этот вопрос связан, но не совпадает с этим.]
Мой компилятор предупреждает о неявной конвертации или приведении определенных типов в 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 С++ 2008, но я подозреваю, что другие компиляторы могут иметь похожие предупреждения.
Итак, мой вопрос: какова производительность, влияющая на литье/преобразование на bool
? Имеет ли явное преобразование лучшую производительность в некоторых обстоятельствах (например, для определенных целевых архитектур или процессоров)? Неявное преобразование каким-то образом путает оптимизатор?
Microsoft пояснение их предупреждения не особенно полезно. Они подразумевают, что есть веская причина, но они не объясняют это.