2009-11-09 8 views
5

domanda di svago/curiosità come implicita nel titolo.Quali operatori logici C++ utilizzate: e, o, non e gli operatori di stile ik o C? perché?

Personalmente preferisco i nuovi operatori per rendere il codice più leggibile secondo me.

Quali usi? Qual è la tua ragione per sceglierne una rispetto all'altra?

anche Emacs mette in risalto questi operatori in modo diverso in modo da ottenere un maggiore feedback visivo quando guardo lo schermo. So che i vecchi operatori possono essere evidenziati, ma la ISO646 evidenziata per default

+0

vedi anche: http://stackoverflow.com/questions/1103313/is-anybody-using-the-named-boolean-operators stefaanv

+0

Wow, avevo già risposto a questa domanda precedente con quasi la stessa risposta! Segnato questo come un dupe. –

risposta

6

Non userò gli operatori alternativi perché causano più confusione e chiarezza a mio parere.
Se vedo un nome alfabetico mi aspetto un namespace, una classe, una variabile, una funzione o un operatore di uno stile di funzione - gli operatori comuni dividono questo intuitivamente in sequenze per me. Lo stile alternativo non si adatta al mondo C/C++ per me.

Inoltre, mentre Greg ha un punto riguardante le persone nuove in C o C++, ci si abitua molto presto - non ho problemi a individuare ! ovunque.

2

Io uso quelli vecchi.

Motivo: ho codificato in Perl per un po 'e gli operatori hanno precedenza diversa a seconda che si tratti della variante scritta o meno. Mi sono imbattuto in un paio di bug a causa di questo e da allora uso sempre &&, || e ! sulla variante spiegata per qualsiasi lingua che li abbia.

+0

PHP ha anche questi problemi. Sostituire '($ a o $ b)' con '($ a || $ b)' ha corretto un bug, a quel punto mi sono stufato del tutto con la lingua. – Tom

3

Ti stai riferendo ai token alternativi originati da iso646.h?

Sono di C ed è molto raro da vedere, quindi probabilmente sarà meno leggibile dalla maggior parte. Sono sicuro che se fossimo stati "cresciuti" con queste parole chiave sarebbero più comuni, dal momento che leggono meglio l'inglese.

Quindi, ancora una volta, && consente ai parlanti non anglofoni di dire "e" nella loro lingua nativa. (Non che questo era una preoccupazione nelle parole chiave, in primo luogo.)

+0

Ma ciso646.h contiene ... niente ?? –

+0

Cosa? Per me, Visual Studio 2008, fa l'atteso '#include ', che ha le macro. Sono sicuro che g ++ è lo stesso. – GManNickG

+0

'' in C contiene 'e',' e_eq', ecc. Come macro, ma '' (secondo l'appendice C dello standard) dovrebbe escludere le macro 'and',' e_eq', ecc. Così come sono parole chiave in C++, rendendo così '' l'intestazione più inutile nello standard (IMHO). VS è noto per essere non conforme a questo proposito, tuttavia, in modo che possa spiegare che cosa sei headerfile. –

8

io preferisco usare not invece di ! perché è molto più leggibile:

if (not condition()) { 
} 

contro

if (!condition()) { 
} 

Il tipo ! si perde in là. Ovviamente, questo deve essere evitato (o #define d) quando si scrive codice destinato a essere portatile.

Tuttavia, and e or non fanno molto per me, quindi non li uso.

+15

'if (not condition())' è un abominio blasfemo dall'inferno. –

+0

Non sono d'accordo con la leggibilità. Ma perché sono così abituato a! operatore. Allenare il mio cervello a leggere non come un operatore è un processo non banale alla mia età. –

+0

Mi piace usare 'not',' and', 'or', ancora di più visto che lavoro con python. Emacs li evidenzia di default, trovo 'not' in particolare più leggibile, e sono più veloci a digitare IMO. – rafak

11

io non credo di avere mai nemmeno visto/C codice sorgente C++ che utilizza in realtà gli operatori alfabetici. Per me, sembra solo strano; molto un-C-ish.

+4

Non sapevo che esistessero fino ad ora. –

1

I token alternativi per operatori logici (e non solo logici), come and, or, not ecc. Non hanno nulla a che fare con C++ in particolare. Erano presenti anche in C, praticamente fin dall'inizio. Se ti piace usarli nel tuo codice, sei libero di farlo, ma non sorprenderti se le persone vedono questa pratica come poco ortodossa. Normalmente le persone utilizzano i designatori tradizionali per questi operatori (ad esempio &&, || e così via) in entrambi i codici C e C++.

+3

No. 'and',' or', 'not', ecc. Sono _specific_ in C++. Sono _keywords_ in C++. Non puoi scegliere di fare a meno di loro. Sono macro standard in C, ma se non includi , non le ottieni. –

+0

Beh, non voglio ricominciare il dibattito battuto a morte sul fatto che i token alternativi siano o meno parole chiave. A mio parere, la formulazione dello standard (almeno C++ 98) è abbastanza chiara: sono * non * parole chiave. Anche se è vero che non sono macro in C++. – AnT

+0

Siamo spiacenti, hai ragione, non sono parole chiave, sono token alternativi. In ogni caso, sono specifici per C++ (come opposti a C, dove sono sicuramente macro). –