Разрешены ли знаки доллара в идентификаторах в C++03?
Что стандарт C++ говорит об использовании знаков доллара в идентификаторах, таких как Hello$World
? Они законны?
7 ответов
Идентификатор C++ может состоять из любого из следующего: _ (подчеркивание), цифры 0-9, буквы az (как в верхнем, так и в нижнем регистре) и не может начинаться с цифры.
Существует ряд исключений, поскольку C99 допускает расширения стандарта (например, Visual Studio).
Они незаконны. Единственными допустимыми символами в идентификаторах являются буквы, цифры и _. Идентификаторы также не могут начинаться с цифр.
В C++03 приведенные ранее ответы верны: они незаконны. Однако в C++11 ситуация изменилась:
Ответ здесь "Возможно":
Согласно §2.11, идентификаторы могут состоять из цифр и идентификаторов, не являющихся цифрами, начиная с одной из последних. идентификаторы-нецифры являются обычным a-z
, A-Z
и подчеркивание, кроме того, начиная с C++11 они включают в себя имена универсальных символов (например, \uBEAF
, \UC0FFEE32
) и другие символы, определяемые реализацией. Так что реализация определяется, если использовать $
в идентификаторе разрешено. VC10 и выше поддерживает это, возможно, и более ранние версии. Он даже поддерживает идентификаторы, такие как こんばんは
,
Но я бы их не использовал. Сделайте идентификаторы максимально удобочитаемыми и переносимыми. $
определяется реализацией и поэтому не является переносимым.
Не законно, но многие, если не большинство компиляторов поддерживают их, обратите внимание, что это может зависеть от платформы, поэтому gcc on arm не поддерживает их из-за ограничений сборки.
Соответствующим разделом является "2.8 Идентификаторы [lex.name]". Из базового набора символов единственными допустимыми символами являются AZ az 0-9 и _. Тем не менее, такие символы, как é (U+00E9) также допускаются. В зависимости от вашего компилятора вам может потребоваться ввести é как \u00e9.
Нелегальная. Я думаю, что знак доллара и обратный удар являются единственными знаками препинания на моей клавиатуре, которые где-то не используются в C++ (знак "%" находится в строках формата, которые в C++ относятся к стандарту C).
Они не являются законными в C++. Однако некоторые языки, производные от C/C++ (такие как Java и JavaScript), допускают их.