2011-03-12 7 views
9

Sì, questo è valido C++:e, o, non contro &&, ||,!

if (false or (true and not false)) ... 

Among others come bitand e xor. In C, erano macro, ma ora sono are keywords! Puoi persino sovraccaricarli! Allora perché qualcuno dovrebbe mai insegnare o scrivere qualcosa di simile:

if (false || (true && !(false))) ... 

Perché nessuno loro utilizzo?

+0

"In C, erano macro" No, non erano mai macro "in C", anche se alcuni singoli programmi C potrebbero aver definito tali macro. Questa non è una vera domanda, è supponente e polemica - vedi le FAQ. –

+0

possibile duplicato di [Qualcuno usa gli operatori booleani con nome?] (Http://stackoverflow.com/questions/1103313/is-anybody-using-the-named-boolean-operators) [Quali operatori logici C++ usi: e, o, non e gli operatori di stile ilk o C? perché?] (http://stackoverflow.com/questions/1103313/is-qualcuno-utilizzare-the-named-boolean-operators); vedi anche [token alternativi C++?] (http://stackoverflow.com/questions/555505/c-alternative-tokens) [È possibile disattivare il supporto per "e"/"o" ​​l'utilizzo dell'operatore booleano in gcc?] (http://stackoverflow.com/questions/1069352) –

+1

@Jim Balter: Ma in C, sono macro _ are_, definite in 'iso646.h'. –

risposta

6

Poiché non consentono il codice misto C/C++ senza includere file di intestazione aggiuntivi, sono meno noti ai programmatori e non è immediatamente chiaro se and è la versione di cortocircuito o bit per bit.

+2

Sì, tra '&' e '&&' è molto più facile intuire quale sia un operatore bit per bit che tra 'and' e' bitand'. È spiacevole però che 'not_eq' sia una relazione, mentre' or_eq' è un operatore di assegnazione composto, che ironicamente è bit a bit. –

2

Perché nessuno? Alcuni li usano. Altri pensano che i simboli siano più leggibili delle parole.

1

Le persone semplicemente non sanno di loro (non l'ho fatto fino ad ora).

2

Visual C++ non li supporta.

+0

Microsoft Visual C++ richiede l'inclusione di per utilizzare questi identificatori, aggiungendo un'altra dipendenza inutile a qualcosa che dovrebbe essere nella lingua di base. (o non dovrebbe, ma non dovrebbe sedere da qualche parte nel mezzo) – Tic