[Этот вопрос связан, но не совпадает с этим.]
Если я пытаюсь использовать значения определенных типов в виде булевых выражений, я получаю предупреждение. Вместо того, чтобы подавлять предупреждение, я иногда использую тернарный оператор (?:
) для преобразования в bool. Использование двух не операторов (!!
), похоже, делает то же самое.
Вот что я имею в виду:
typedef long T; // similar warning with void * or double
T t = 0;
bool b = t; // performance warning: forcing 'long' value to 'bool'
b = t ? true : false; // ok
b = !!t; // any different?
Итак, делает ли двойной метод не то же самое? Это более или менее безопасно, чем троичная техника? Является ли этот метод одинаково безопасным с нецелыми типами (например, с void *
или double
для T
)?
Я не спрашиваю, хороший ли стиль !!t
. Я спрашиваю, семантически ли это отличается от t ? true : false
.