Знаки доллара, разрешенные в идентификаторах в С++ 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) и не должны быть используется иначе; диагностика не требуется.
Какое изменение в стандарте позволяет использовать $ в качестве имени идентификатора?