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

后端 未结 2 441
独厮守ぢ
独厮守ぢ 2020-12-12 15:55

I was wondering if someone could explain 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.

相关标签:
2条回答
  • 2020-12-12 16:02

    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.

    0 讨论(0)
  • 2020-12-12 16:28

    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 讨论(0)
提交回复
热议问题