Что квалифицированный-идентификатор/имя и неквалифицированный-идентификатор/имя?



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



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

605   2  
c++

2 ответов:

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

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

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

Дано:

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

Полное имя-это имя, определяющее область видимости.
Рассмотрим следующий пример программы, ссылки на 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::.

Comments

    Ничего не найдено.