[Этот вопрос связан, но не совпадает с этим.]
Если я пытаюсь использовать значения определенных типов в виде булевых выражений, я получаю предупреждение. Вместо того, чтобы подавлять предупреждение, я иногда использую тернарный оператор (?:) для преобразования в 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.