Are dollar-signs allowed in identifiers in C++03? copre che i segni di dollaro negli identificatori non sono consentiti in C++ 03. GCC lo fornisce come C extension e fornisce correttamente una diagnostica in modalità C++ 03. Tuttavia, in C++ 11, int $ = 0
verrà compilato senza preavviso.C++ 11 consente la presenza di segni di dollaro negli identificatori?
Questo answer ragioni che $
può essere ammessa perché nessuno diagnostica è richiesto per gli identificatori di implementazione definita:
The answer here is "Maybe": According to §2.11, identifiers may consist of digits and identifier-nondigits, starting with one of the latter. identifier-nondigits are the usual
a-z
,A-Z
and underscore, in addition since C++11 they include universal-character-names (e.g.\uBEAF
,\UC0FFEE32
), and other implementation-defined characters. So it is implementation defined if using$
in an identifier is allowed. VC10 and up supports that, maybe earlier versions, too. It even supports identifiers likeこんばんわ
.But: I wouldn't use them. Make identifiers as readable and portable as possible.
$
is implementation defined and thus not portable.
Questo linguaggio è presente nello standard C++ 03 e, in modo non trovo questo essere un argomento molto convincente.
§2.10/2
In addition, some identifiers are reserved for use by C++ implementations and standard libraries (17.6.4.3.2) and shall not be used otherwise; no diagnostic is required.
Quale cambiamento nella norma consente $
per essere usato come un nome di identificatore?
Clang avvisa su questo. –
@Shafik Abbastanza confusamente questo [answer] (http://stackoverflow.com/a/14595459/3920237) collega alla vecchia documentazione di gcc che dice esplicitamente che C++ proibisce '$' negli identificatori. L'hanno spostato su [opzioni del preprocessore] (https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html # Preprocessore-Opzioni) con la sola descrizione 'Accetta '$' negli identificatori. –
Storicamente, DEC utilizzava $ in tutti i suoi servizi di sistema e nomi di funzioni di libreria con $$ in tutte le sue funzioni interne. Tutti i compilatori DEC o estensioni che consentono nomi di simboli $ o pragma per la mappatura (come con ADA). – user3344003