什么是资格意味着什么?

在阅读关于编程的文章,手册等时,我总是遇到qualified的词。 就像在java中一样,完全限定的类名是com.example.Class。 阅读本文,将C ++中的范围解析operator ::定义为用于限定隐藏名称,以便您仍然可以使用它们。 这有定义吗? 因为它似乎每次都在不同的环境中使用。

在计算机编程中,完全限定名称是一个明确的名称 ,它指定调用引用的对象,函数或变量,而不考虑调用的上下文。 在层次结构中,名称是完全限定的,因为它在某种意义上是完整的,它包括(a)给定元素上方的层次序列中的所有名称,以及(b)给定元素本身的名称。“ 因此,完全限定名称显式引用由于调用范围而隐含的名称空间。 虽然总是要消除歧义,但这可能意味着依赖于上下文的不同事物。

来源维基百科

简而言之,这意味着,

您可以在项目中使用名为Math的类,但Math也已存在于Math中。

因此,为了明确地识别您实际引用的类,您还需要使用包来限定名称:

 java.lang.Math //refers to java class Math org.myproject.Math //refers to your project Math class 

来自Merriam Webster

QUALIFY的完整定义

及物动词1a:从一般forms减少到特定forms或限制forms:修改b:减少严厉或严格:适度c:改变d的强度或风味:限制或修改(作为名词)的含义)2:通过命名属性来表征:描述3 a:符合特殊目的的培训,技能或能力b(1):宣布胜任或足够:certificate(2):以合法身份投资:许可

第1和第2条适用。 Java和C ++都有作用域/命名空间,“qualify”意味着引入足够的范围来区分潜在的候选者。

Cf:如果你有两个类,名为“read”的成员。

 class Foo { void read(); }; class Bar { void read(); }; 

在您的实现文件中,您将实现这两​​个function。 但是如果你写的(C ++)

 void read() {} 

这是有效的,但它在全局命名空间中创建一个函数,而不是实现这两个函数之一。 在类Foo定义中编写的相同代码将实现Foo :: read。

因此,要在类定义之外实现我们的成员函数,我们必须限定 – 从常规中减少,以命名容器路径的属性 – 我们正在实现的读取。

 void Foo::read() {} void Bar::read() {} 

全局命名空间是“::”,因此如果您尝试使用它,您甚至可以显式:

 void ::read() {} // note: this name is already taken by stdio's read() :)