Что такое квалифицированный идентификатор / имя и неквалифицированный идентификатор / имя? - PullRequest
53 голосов
/ 31 августа 2011

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

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

Ответы [ 2 ]

48 голосов
/ 31 августа 2011

Полное имя - это то, которое имеет какое-то указание на то, где оно принадлежит, например, спецификация класса, спецификация пространства имен и т. Д. Неквалифицированное имя - это имя, которое не является квалифицированным.

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

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

Дано:

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:: являются спецификаторы вложенных имен .

15 голосов
/ 31 августа 2011

Полное имя - это имя, определяющее область.
Рассмотрим следующий пример программы, ссылки на cout и endl являются квалифицированными именами:

#include <iostream>

int main()  
{
   std::cout<<"Hello world!"<<std::endl;
   return 0;
}

Обратите внимание, что использование cout и endl началось с std::. Они делают их Квалифицированными именами .

Если бы мы внесли cout и endl в область видимости с помощью объявления или директивы using (например, using namespace std;) и использовали только cout и endl сами по себе, они были бы безусловными именами , потому что им не хватит std::.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...