Sì. Per i tipi interi, !
restituisce true
se l'operando è zero e altrimenti false
.
Quindi !b
significa solo b == 0
.
Questo è un caso particolare in cui un valore viene convertito in un bool
. Il !b
può essere visualizzato come !((bool)b)
quindi la domanda è qual è la "verità" di b
. In C++, i tipi aritmetici, i tipi di puntatore e enum possono essere convertiti in bool
. Quando il valore è 0 o null, il risultato è false
, altrimenti è true
(C++ §4.1.2).
Naturalmente classi personalizzate può anche sovraccaricare i operator!
o operator
< tipi possono essere convertiti in bool> per consentire l'!b
per le loro classi. Ad esempio, std::stream
ha sovraccaricato la operator!
e operator void*
per il controllo della failbit, cosicché idiomi come
while (std::cin >> x) { // <-- conversion to bool needed here
...
può essere utilizzato.
(Ma il codice !(a > b && b <= c) || a > c && !b
è solo criptico.)
questo è un codice criptico, non facile da leggere, con un nome senza significato per le variabili. 'd =! (a> b && b c && !b;' Per favore, programma in modo pulito: scegli un buon nome e non moltiplicare numerose operazioni in una sola riga –
@Stephane: "qualcuno mi ha mostrato questo". scrivi il codice, come eseguire le tue istruzioni? Come succede, solo il '! b' è pertinente alla domanda, quindi il resto potrebbe essere eliminato, ma poiché l'interrogante non capisce l'operatore'! ', questo potrebbe non essere ovvio. –
@Steve.Ok, ma mi sono imbattuto spesso in quei nomi di variabili ... –