Что квалифицированный-идентификатор/имя и неквалифицированный-идентификатор/имя?
Мне было интересно, может ли кто-то объяснить эти термины, так как я встречаю их во многих местах. Я знаю некоторые основные теории о них, но не уверен, что я знаю, правильно или неправильно.
Так может ли кто-нибудь объяснить эти термины?
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