[Cette question est liée à, mais pas la même que celui-ci .]
Si j'essaie d'utiliser des valeurs de certains types comme expressions booléennes, j'obtiens un avertissement. Plutôt que de supprimer cet avertissement, j'utilise parfois l'opérateur ternaire ( ?:
) pour convertir en bool. L'utilisation de deux opérateurs not ( !!
) semble faire la même chose.
Voilà ce que je veux dire :
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?
Alors, la technique du double pas fait-elle vraiment la même chose ? Est-elle plus ou moins sûre que la technique ternaire ? Cette technique est-elle également sûre avec les types non intégraux (par exemple, avec les types void *
ou double
pour T
) ?
Je ne demande pas si !!t
est un bon style. Je demande si c'est sémantiquement différent de t ? true : false
.