if (c)
corrisponde a if (c == 0)
in C++?Come viene valutata l'istruzione in C++?
risposta
No, if (c)
è lo stesso di if (c != 0)
. E if (!c)
corrisponde a if (c == 0)
.
Supponendo che non ci sia un sovraccarico strano luogo, che è spesso parte della risposta in C++. –
Naturalmente, se gli operatori == o! = Sono sovraccarichi, potrebbe succedere di tutto, potrebbe anche iniziare a suonare l'inno nazionale per te ... ;-) – Jesper
Uno di questi giorni ho intenzione di fare una classe che sovraccarichi gli operatori per riprodurre effetti sonori. Sarà fantastico ogni volta che qualcuno vorrà organizzarli. – rlbond
E 'più come if (c != 0)
Naturalmente, !=
operatore può essere sovraccaricato quindi non è perfettamente esatto dire che quelle sono esattamente uguali.
Sì, sono gli stessi se si modifica == 0
in != 0
.
Uh, no, non lo sono. – Aistina
L'istruzione if è * definita * per accettare qualsiasi cosa diversa da zero come vera. Quindi sì è lo stesso. –
Mi rompo dal pacchetto su questo ... "if (c)
" è il più vicino a "if (((bool)c) == true)
". Per i tipi interi, significa "if (c != 0)
". Come altri hanno sottolineato, sovraccaricare operator !=
può causare qualche stranezza, ma può sovraccaricare "operator bool()
" a meno che non mi sbagli.
La domanda è stata originariamente taggata con solo C, quindi le risposte di cui sopra in quanto non c'è bool in C. –
if (static_cast
C99 ha Bool ... – rlbond
Ciò vale solo per i valori numerici. se c è classe, ci deve essere un operatore di overload che fa conversione booleana, come qui:
#include <stdio.h>
class c_type
{
public:
operator bool()
{
return true;
}
};
int main()
{
c_type c;
if (c) printf("true");
if (!c) printf ("false");
}
Se c è un puntatore o un valore numerico,
if(c)
è equivalente a
if(c != 0)
Se c è un valore booleano (tipo bool [solo C++]), (edit: o un tipo definito dall'utente con il sovraccarico del bool operatore())
if(c)
è equivalente a
if(c == true)
Se c è né un puntatore o un valore numerico né un booleano,
if(c)
non viene compilato.
C è un tipo definito dall'utente, si può semplicemente implementare 'operator bool()' come indicato da D. Shawley e galets, quindi verrà compilato correttamente. – Troubadour
Esatto, lo aggiungo alla spiegazione –
Se c
è un puntatore, allora la prova
if (c)
non è esattamente la stessa
if (c != 0)
Quest'ultimo è un controllo diretto di c
contro la (Null) puntatore 0
mentre la prima è in realtà un'istruzione per verificare se c
è il punto di un oggetto valido. In genere i compilatori producono lo stesso codice però.
no, non è ... entrambi significano assolutamente lo stesso nel caso di un puntatore: if (c! = NULL) – Massa
Non c'è modo per la compilazione e/o il runtime di sapere se un oggetto è valido in C o C++. È possibile scrivere: "X * c = (X *) 1;" Quindi quasi certamente punta a un oggetto non valido. E "se (c)" sarà vero. –
@Andrew: Dubito che tu possa giustificare la tua affermazione che non c'è modo di verificare se l'oggetto è valido o meno. Certamente, il compilatore richiede molto sforzo per generare un codice run-time da controllare ed è per questo motivo che i compilatori non si preoccupano di generare lo stesso codice, cioè il test contro il puntatore nullo. Ecco perché il tuo esempio non riesce a produrre un risultato falso su (probabilmente) tutti i compilatori correnti. – Troubadour
- 1. Come viene valutata l'espressione operatore OR
- 2. Come viene valutata l'istruzione 'if (A && B)'?
- 3. in quale fase viene valutata JSTL JSP?
- 4. la condizione dopo && viene sempre valutata
- 5. In cicli for, la lunghezza dell'array viene valutata ogni iterazione?
- 6. espressione non valutata a una costante- C++
- 7. Quando viene valutata la testa di uno stream?
- 8. Multi-TABLE funzione valutata vs Inline Table funzione valutata
- 9. Oracle SQL: se utilizzo una funzione sia come campo che in ordine, viene valutata di nuovo?
- 10. caso allora clausola sempre valutata
- 11. espressione valutata 2 volte
- 12. Spring jsp page non valutata
- 13. Perché la variabile dichiarata all'interno dell'istruzione IF viene creata anche quando la condizione viene valutata come falsa?
- 14. Perché l'espressione dopo la parentesi di ritorno viene controllata per la correttezza lessicale, ma non viene valutata?
- 15. Come faccio a sostituire con un'espressione valutata in Perl?
- 16. Questa istruzione C/C++ if() può mai essere valutata su TRUE?
- 17. Come viene implementato l'operatore sizeof in C++?
- 18. Perché l'espressione per live deve essere valutata in jQuery
- 19. Come viene valutato `ProC# ==`?
- 20. In quale ordine è un'istruzione if valutata in Python
- 21. Croce applicare una funzione valutata tabella
- 22. CodeContracts: la condizione booleana viene valutata a un valore costante, perché?
- 23. Funzione di sovraccarico valutata con ternario
- 24. È una funzione valutata in Nashorn riutilizzabile da diversi thread?
- 25. come vedere come viene depositato un array C# in memoria?
- 26. java: quante volte è l'espressione collezione valutata in un "foreach"
- 27. Come viene implementata l'ereditarietà multipla di C++?
- 28. AngularJs: ng-show/ng-hide espressione non valutata
- 29. Come viene implementata GetHashCode() della stringa C#?
- 30. Come viene memorizzato un nome di variabile in C?
Ricordare che 0 non significa sempre la stessa cosa. Può essere la costante del puntatore nullo o zero intero. –
Non intendi "È se (c) è lo stesso di if (c! = 0) in C++?" ? –
La variabile c di un tipo particolare? –