Знаки доллара, разрешенные в идентификаторах в С++ 03?, показывают, что знаки доллара в идентификаторах не разрешены в С++ 03. GCC предоставляет его как расширение C и правильно дает диагностику в режиме С++ 03. Однако в С++ 11 int $ = 0
будет компилироваться без предупреждения.
Этот ответ объясняет, что $
может быть разрешен, потому что для реализации определенных идентификаторов не требуется диагностика:
Ответ здесь "Возможно" . Согласно §2.11, идентификаторы может состоять из цифр и идентификаторов-недигитов, начиная с одного последней. идентификаторы-недигиты являются обычными
a-z
,a-z
и подчеркивание, кроме того, поскольку С++ 11 включают универсальные имена символов (например,\uBEAF
,\UC0FFEE32
), и другие символы, определенные реализацией. Таким образом, это реализация определена если использование$
в идентификаторе разрешено. VC10 и выше поддерживают это, возможно, более ранние версии. Он поддерживает даже такие идентификаторы, какこんばんわ
.Но: Я бы не использовал их. Сделайте идентификаторы максимально читабельными и переносимыми.
$
- это реализация, и, следовательно, не переносимым.
Этот язык присутствует и в стандарте С++ 03, поэтому я не считаю это очень убедительным аргументом.
§2.10/2
Кроме того, некоторые идентификаторы зарезервированы для использования С++ реализаций и стандартных библиотек (17.6.4.3.2) и не должны быть используется иначе; диагностика не требуется.
Какое изменение в стандарте позволяет использовать $
в качестве имени идентификатора?