Мне было интересно, может ли кто-нибудь объяснить там термины, так как я встречаю их во многих местах. Я знаю некоторую основную теорию о них, но не уверен, что я знаю правильно или неправильно.
Так может кто-нибудь объяснить эти условия?
Мне было интересно, может ли кто-нибудь объяснить там термины, так как я встречаю их во многих местах. Я знаю некоторую основную теорию о них, но не уверен, что я знаю правильно или неправильно.
Так может кто-нибудь объяснить эти условия?
Квалифицированное имя - это имя, которое имеет какой-либо показатель того, где он принадлежит, например. спецификацию класса, спецификацию пространства имен и т.д. Неквалифицированное имя - это тот, который не является квалифицированным.
Прочитайте ответ Джеймса Макнеллиса здесь:
Что такое вложенный спецификатор имен?
Дано:
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 namespace std;
) и использовали только cout
и endl
сами по себе, они были бы неквалифицированными именами, потому что им не хватает std::
.