8

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

4

2 回答 2

12
于 2013-09-14T15:02:55.777 回答
3

来自韦伯斯特

合格的完整定义

及物动词 1 a :从一般形式减少到特定或限制形式 :修饰 b :减少苛刻或严格 :适度 c :改变强度或风味 d :限制或修饰(作为名词)的含义) 2 : 通过命名属性来表征 : 描述 3 a : 通过培训、技能或能力适应特殊目的 b (1) : 声明有能力或足够 : 证明 (2) : 以法律能力进行投资 : 执照

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

Cf:如果您有两个类,其中一个名为“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() :)
于 2013-09-14T18:22:45.793 回答