Что такое идентификатор /id и unqualified-id/name?
Мне было интересно, может ли кто-нибудь объяснить там термины, так как я встречаю их во многих местах. Я знаю некоторую основную теорию о них, но не уверен, что я знаю правильно или неправильно.
Так может кто-нибудь объяснить эти условия?
Ответ 1
Квалифицированное имя - это имя, которое имеет какой-либо показатель того, где он принадлежит, например. спецификацию класса, спецификацию пространства имен и т.д. Неквалифицированное имя - это тот, который не является квалифицированным.
::A является квалифицированным идентификатором, но не имеет спецификатора вложенных имен.
A::B - это квалифицированный идентификатор, а A:: - спецификатор вложенных имен.
::A::B - это квалифицированный идентификатор, а A:: - спецификатор вложенных имен.
A::B::F - это идентификатор с квалификацией и оба B:: и A::B:: являются вложенными именами.
::A::B::F является квалифицированным идентификатором, а B:: и A::B:: являются вложенными именами.
Ответ 2
Ключевое имя - это имя, определяющее область действия.
Рассмотрим следующую примерную программу, ссылки на cout и endl являются квалифицированными именами:
#include <iostream>
int main()
{
std::cout<<"Hello world!"<<std::endl;
return 0;
}
Обратите внимание, что использование cout и endl начиналось с std::. Они делают их Квалифицированными именами.
Если мы привезли cout и endl в область видимости с помощью объявления или директивы * (например, using namespace std;) и использовали только cout и endl сами по себе, они были бы неквалифицированными именами, потому что им не хватает std::.