限定id/name和非限定id/name是什么?

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

本文关键字:name id 是什么 限定      更新时间:2023-10-16

我想知道是否有人可以解释一下这些术语,因为我在很多地方都遇到过它们。我知道一些关于它们的基本理论,但不确定我所知道的是对还是错。

谁能解释一下这些术语?

限定名是指具有某种指示其所属位置的名称,例如类规范、名称空间规范等。非限定名是指没有限定的名称。

阅读James McNellis的回答:

什么是嵌套名称说明符?

给定

:

struct  A {
    struct B {
        void F();
    };
};
  • A非限定id
  • ::A限定id,但没有嵌套名称说明符
  • A::B限定idA::嵌套名称说明符
  • ::A::B限定idA::嵌套名称说明符
  • A::B::F限定idB::A::B::都是嵌套名称说明符
  • ::A::B::F限定idB::A::B::都是嵌套名称说明符

限定名是指定作用域的名称。
考虑下面的示例程序,对coutendl的引用是限定名:

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

注意coutendl的使用是从std::开始的。这使它们成为限定名

如果我们通过using声明或指令*(如using namespace std;)将cout和endl带入作用域,并且仅使用coutendl本身,它们将是非限定名,因为它们缺少std::