Является ли (одно подчеркивание) допустимым именем переменной C++?
С gcc 4.7.2 это компилируется просто отлично для меня:
int main()
{
int _ = 1;
return 0;
}
могу ли я ожидать, что это будет компилироваться в целом? Я читал ответы о подчеркиваниях как префиксах. Но что, если подчеркивание не начинаются?
5 ответов
имя (идентификатор) состоит из последовательности букв и цифр. Этот первым символом должна быть буква. Символ подчеркивания"_", _, - это рассматривал письмо.
из языка программирования C++, 4-е издание.
по словам Страуструпа (3-е издание, раздел 4.9.3), идентификатор состоит из последовательности букв и цифр. Первый символ должен быть буквой. Символ подчеркивания считается буквой.
Итак, да, он должен быть портативным.
Да _
является допустимым идентификатором, так как он соответствует требованиям синтаксис. В основном идентификатор состоит из символа подчеркивания или буквы, за которым следует ноль или более других символов, которые могут быть символами подчеркивания, буквами или цифрами. (Начиная с C++ 2011 идентификаторы также могут содержать универсальные имена символов и другие символы, определенные реализацией, но это не относится к вашему вопросу.)
но это, вероятно, не тот, который вы должны использовать в своем собственном коде, если вы не очень осторожный.
As ответ говорит, цитируя стандарт 2003 C++:
каждое имя, начинающееся с подчеркивания зарезервированы для реализация для использования в качестве имени в глобальном пространстве имен.
код _
переменная не находится в глобальном пространстве имен, поэтому в этом случае вы в безопасности, но это хорошая идея, чтобы избежать определения любой идентификаторы, начинающиеся с подчеркивания.
кроме того, я считаю GNU gettext (который обеспечивает поддержку локализованных сообщений) использует имя _
для своих целей. (Возможно, это была плохая идея для GNU gettext сделать это, но это был удобный выбор.)
да. один _
будет приниматься как переменная или любое имя идентификатора / пространства имен! Е. Г. Гугл макет использует это.
Да, это допустимый префикс. Бег!--2-->
#include <iostream>
using namespace std;
int main()
{
char* _ = "Hello World";
cout << _ << endl;
return 0;
}
распечатывает "Hello World", как и ожидалось. Это не очень полезное имя varible, но оно действительно