Подтвердить что ты не робот

Что такое идентификатор /id и unqualified-id/name?

Мне было интересно, может ли кто-нибудь объяснить там термины, так как я встречаю их во многих местах. Я знаю некоторую основную теорию о них, но не уверен, что я знаю правильно или неправильно.

Так может кто-нибудь объяснить эти условия?

4b9b3361

Ответ 1

Квалифицированное имя - это имя, которое имеет какой-либо показатель того, где он принадлежит, например. спецификацию класса, спецификацию пространства имен и т.д. Неквалифицированное имя - это тот, который не является квалифицированным.

Прочитайте ответ Джеймса Макнеллиса здесь:

Что такое вложенный спецификатор имен?

Дано:

struct  A {
    struct B {
        void F();
    };
};
  • A - это неквалифицированный идентификатор.
  • ::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::.