在阅读有关编程的文章,手册等时,我总会遇到qualified
这个词。就像在java中一样,完全限定的类名是com.example.Class。读
this文章将C ++中的范围解析运算符::
定义为用于限定隐藏名称,以便您仍然可以使用它们。这有定义吗?因为它似乎每次都在不同的环境中使用。
答案 0 :(得分:11)
在计算机编程中,完全限定名称是 明确名称 指定调用引用的对象,函数或变量 不考虑呼叫的背景。在一个 层次结构,名称在“完成”时完全合格 从某种意义上说,它包括(a)层次序列中的所有名称 在给定元素之上和(b)给定元素的名称 “因此,完全限定名称明确指代名称空间 否则由于调用的范围而隐含。 虽然总是要消除歧义,但这可能意味着不同 依赖于背景的事情。
简而言之,就是
您的项目中可以有一个名为Math
的类,但Java中也存在Math
。
因此,为了明确地确定您实际指的是哪个类,您还需要使用包来限定名称:
java.lang.Math //refers to java class Math
org.myproject.Math //refers to your project Math class
答案 1 :(得分:2)
来自Merriam Webster
QUALIFY的完整定义
及性动词 1 a:从一般形式减少到特定形式或限制形式:修改 b:减少严厉或严格:温和 c:改变其强度或味道 d:限制或修改(作为名词)的含义 2 :通过命名属性进行表征:describe 3 a:通过培训,技能或能力来达到特殊目的 b(1):宣布有资格或足够:证明(2):具有法律行为能力的投资:许可证
第1和2条适用。 Java和C ++都有范围/命名空间,“qualify”意味着引入足够的范围来区分潜在的候选者。
C.f。:如果您有两个类,其成员名为“read”。
class Foo {
void read();
};
class Bar {
void read();
};
在您的实现文件中,您将实现这两个功能。但如果你写了(C ++)
void read() {}
这是有效的,但它在全局命名空间中创建了一个函数,而不是实现这两个函数中的一个。在类Foo定义中编写的相同代码将实现Foo :: read。
因此,要在类定义之外实现我们的成员函数,我们必须限定 - 从常规中减少,以命名容器路径的属性 - 我们正在实现的读取。
void Foo::read() {}
void Bar::read() {}
全局命名空间是“::”,因此如果您尝试使用它,您甚至可以明确:
void ::read() {} // note: this name is already taken by stdio's read() :)