什么是qualified-id/name和unqualified-id/name?

M3t*_*0it 55 c++

我想知道是否有人可以解释那些条款,因为我在许多地方遇到它们.我知道一些关于它们的基本理论,但不确定我所知道的是对还是错.

那么任何人都可以解释这些条款吗?

Sad*_*que 51

限定名称是指其所属位置的某种名称,例如类规范,名称空间规范等.非限定名称是不合格的名称.

阅读James McNellis的回答:

什么是嵌套名称说明符?

鉴于:

struct  A {
    struct B {
        void F();
    };
};
Run Code Online (Sandbox Code Playgroud)
  • A是一个不合格的身份证.
  • ::A是一个限定ID,但没有嵌套名称说明符.
  • A::B是一个限定ID,A::是一个嵌套名称说明符.
  • ::A::B是一个限定ID,A::是一个嵌套名称说明符.
  • A::B::F是一个合格的-ID和两个B::A::B::嵌套名称符.
  • ::A::B::F是一个合格的-ID和两个B::A::B::嵌套名称符.

  • @oenone:简单回答:如果它包含`::`则是合格的 (7认同)
  • @Als:他们是一回事.语法只提到*qualified-id*(语法中没有*qualified-name*的概念),但标准提到*限定名*在文本描述中引用*qualified-id*几次. (6认同)
  • @DavidRodríguez - dribeas:一个州之间的区别如何:合格的身份证和合格的姓名? (3认同)

Alo*_*ave 15

限定名称是指定范围的名称.
请考虑以下示例程序,引用coutendl是限定名称:

#include <iostream>

int main()  
{
   std::cout<<"Hello world!"<<std::endl;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

注意使用coutendl开始std::.这些使他们成为合格的名字.

如果我们把cout和ENDL到范围通过using声明或指令*(如using namespace std;),只是用来coutendl自己只是,他们本来不合格的名字,因为他们缺乏std::.