开发者

What are qualified-id/name and unqualified-id/name?

开发者 https://www.devze.com 2023-03-31 19:50 出处:网络
I was wondering if someone could expl开发者_如何学Pythonain there terms since I encounter them in many places. I know some basic theory about them but not sure what I know is right or wrong.

I was wondering if someone could expl开发者_如何学Pythonain there terms since I encounter them in many places. I know some basic theory about them but not sure what I know is right or wrong.

So can any one please explain these terms?


A qualified name is one that has some sort of indication of where it belongs, e.g. a class specification, namespace specification, etc. An unqualified name is one that isn't qualified.

Read James McNellis' answer here:

What is a nested name specifier?

Given:

struct  A {
    struct B {
        void F();
    };
};
  • A is an unqualified-id.
  • ::A is a qualified-id but has no nested-name-specifier.
  • A::B is a qualified-id and A:: is a nested-name-specifier.
  • ::A::B is a qualified-id and A:: is a nested-name-specifier.
  • A::B::F is a qualified-id and both B:: and A::B:: are nested-name-specifiers.
  • ::A::B::F is a qualified-id and both B:: and A::B:: are nested-name-specifiers.


A qualified name is one that specifies a scope.
Consider the following sample program, the references to cout and endl are qualified names:

#include <iostream>

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

Notice that the use of cout and endl began with std::. These make them Qualified names.

If we brought cout and endl into scope by a using declaration or directive*(such as using namespace std;), and used just cout and endl just by themselves , they would have been unqualified names, because they would lack the std::.

0

精彩评论

暂无评论...
验证码 换一张
取 消