C'è qualche differenza traDifferenza tra "o" e "||"
if (a or b or c) {
... e ...
if (a || b || c) {
... e più in generale tra i due operatori, anche in termini di precedenza?
C'è qualche differenza traDifferenza tra "o" e "||"
if (a or b or c) {
... e ...
if (a || b || c) {
... e più in generale tra i due operatori, anche in termini di precedenza?
A parte il senso stilistico che fa pensare a molti programmatori esperti "Huh, qualcuno ha improvvisamente iniziato a scrivere Pascal?", Non c'è alcuna differenza funzionale.
Lo scopo di questi nomi alternativi è consentire alle persone che vivono in, ad esempio, Svezia o Germania, di utilizzare una variante locale standard ASCII, dove |
è ö
.
Dall'introduzione di Unicode e ASCII esteso, questa esigenza è praticamente scomparsa, poiché i set di caratteri nazionalizzati non devono "rubare" caratteri meno comunemente usati per produrre i loro caratteri "speciali" nazionali.
Tornato all'università, ho visto un ragazzo con una libreria di macro che faceva sembrare il codice C++ quasi esattamente come pascal. Compreso 'begin' e' end'. – Sulthan
Non ho capito il tuo secondo paragrafo - per quanto ne so io ö' non esiste nella tabella ASCII danese e certamente non su una tastiera danese. Su una tastiera danese il carattere pipe '|' si trova nella prima riga a sinistra di '← Backspace' e su' Å' mentre su una tastiera americana il pipe è - come tutti sapete - situato sotto '← Backspace'. – Muleskinner
ASCII è ASCII e non ci sono varianti. Forse intendevi le codepage, ma quelle variano solo nella regione oltre l'ASCII, cioè i valori dei caratteri da 128 a 255. I caratteri '|' e '&' sono in ASCII e quindi in qualsiasi codepage. Ciò che è diverso negli altri paesi è il layout della tastiera, e quando quei caratteri speciali potrebbero essere difficili da accedere, 'o',' e' ecc. –
modificato È possibile sovraccaricare operator or
.
Sono uguali.
Vedere Operators in C and C++.
Se si esegue il sovraccarico di operator or
per un tipo, non è possibile sovraccaricare lo operator||
per lo stesso tipo in cui il compilatore considererà la stessa funzione.
Questo errore deriva dal seguente codice:
> prog.cpp: In function ‘bool operator||(Type, Type)’:
> prog.cpp:8:6: error: redefinition of ‘bool operator||(Type, Type)’
> prog.cpp:4:6: error: ‘bool operator||(Type, Type)’ previously defined here
Su ideaone:
class Type {}
};
bool operator or(Type lhs, Type rhs) {
return true;
}
bool operator ||(Type lhs, Type rhs) {
return false;
}
int main() {
Type a;
Type b;
a or b;
a || b;
}
Come da ISO14882: 2011 (e) 2.6-2 (Tabella 2) or
è un token per un'alternativa ||
, e come tale ha esattamente lo stesso significato:
In tutti gli aspetti della lingua langua ge, ogni token alternativo si comporta allo stesso come token primario, tranne che per il suo spelling.
Spesso i compilatori li implementano come #define or ||
o l'equivalente interno.
Lo stesso vale per and
, bitor
, xor
, compl
, bitand
, and_eq
, or_eq
, xor_eq
, not
e not_eq
.
Come è stato detto nelle altre risposte, i due sono pensati per essere uguali e quindi scambiabili. Ma c'è una grande differenza: MSVC, C++ Builder e forse anche altri compilatori non supportano or
senza includere un'intestazione speciale. Questo rende l'uso di or
un ostacolo di portabilità.
No. –
Non c'è alcuna differenza in alcun modo. Sono equivalenti. – juanchopanza
Omg, 10 anni di esperienza in C++ e non sapevo che esistessero ('o', 'e' ecc.) ... –