Ho appena letto questo bel pezzo di Reddit.
Menzionano ee or
sono “token alternativi” per &&
e ||
Fino ad ora ero davvero all’oscuro di questi. Certamente, tutti conoscono le di-graph e i tricogrammi , ma and
and or
? Da quando? Si tratta di una recente aggiunta allo standard?
Ho appena controllato con Visual C ++ 2008 e non sembra riconoscerli come qualcosa di diverso da un errore di syntax. Cosa sta succedendo?
MSVC li supporta come parole chiave solo se si utilizza l’opzione /Za
per disabilitare le estensioni; questo è vero almeno da VC7.1 (VS2003).
Puoi ottenerli supportati come macro includendo iso646.h
.
La mia ipotesi è che credano che renderli parole chiave di default infrangerebbero troppo il codice esistente (e non sarei sorpreso se loro avessero ragione).
Questo è stato discusso in una domanda un paio di settimane fa da qualche parte qui su SO, ma non posso ottenere la ricerca di SO o Google per trovare quella dannata cosa.
Dagli standard C ++ 11, 2.6/ Alternative tokens
:
Tabella 2 – Token alternativi
alternative primary | alternative primary | alternative primary --------------------+---------------------+-------------------- <% { | and && | and_eq &= %> } | bitor | | or_eq |= <: [ | or || | xor_eq ^= :> ] | xor ^ | not ! %: # | compl ~ | not_eq != %:%: ## | bitand & |
Per rispondere effettivamente alla domanda:
Sono stati definiti nel primo standard C ++.
Vedi lo standard C ++. La bozza del comitato n. 2 è disponibile gratuitamente all’indirizzo ftp://ftp.research.att.com/dist/c++std/WP/CD2/body.pdf , sebbene non sia autorevole, obsoleto e parzialmente non corretto in alcuni punti. In particolare, nella sezione 2.5, token alternativi , sono definiti i seguenti:
Primaria alternativa <% { %>} <: [: [ :>] %: # %:%: ## e && bitor | o || xor ^ compl ~ bitand & and_eq & = or_eq | = xor_eq ^ = no! not_eq! =
Anche se onestamente, non ho mai visto nessuno di loro mai usato, tranne and
, or
, e not
, e anche allora, quelli sono rari. Nota che questi NON sono permessi di default nel codice C semplice, solo in C ++. Se vuoi usarli in C, devi #include
te stesso come macro, oppure #include
l’intestazione
, che definisce tutto quanto sopra tranne per <%
>%
<:
:>
%:
%:%:
come macro (vedere la sezione 7.9 dello standard C99).
G ++ li ha, ma non so su MS VC ++.
Puoi ottenere la stessa funzionalità inserendo questo nella parte superiore del tuo file di codice.
#define and && #define bitor | #define or || #define xor ^ #define compl ~ #define bitand & #define and_eq &= #define or_eq ^= #define xor_eq ^= #define ! not #define not_eq !=
Anche se questo è un po ‘hacker, dovrebbe funzionare.
Potresti essere sorpreso di conoscere il resto di loro:
and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq
Elenco da parole chiave C ++ .
Credo che le recenti versioni di GCC supportino queste parole chiave.
Sebbene la domanda sia vecchia, vorrei fornire una risposta più o meno completa: i token alternativi erano già una parte del C ++ 98 attualmente ritirato ( ISO / IEC 14882: 1998 , che, credo, era il primo ISO standard per C ++). Anche se non è una prova in sé (e non possiedo una copia di ISO per c ++ 98), ecco un link – vedi la sezione C ++.
Come menzionato nelle altre risposte, il compilatore MSVC sta violando la sezione [lex.digraph] dello standard quando non è specificato l’indicatore / Za .
Sono nel documento di lavoro per il nuovo standard C ++, a pagina 14: C ++ Standard