什么是“qualify”?

10
阅读关于编程的文章、手册等时,我总是遇到单词“qualified”,比如在Java中,完全限定类名将是com.example.Class。阅读这篇文章时,定义了C++中作用域解析运算符"::"的用途为合格化隐藏名称以便仍可使用它们。但每次使用该单词时,似乎都有不同的含义。是否有一个明确的定义呢?

所以,如果你看看Narendra的引用,我认为你可以理解qualify的含义是消除歧义。虽然N的回答只涉及到Java中的fully qualified class name,但我认为消除歧义适用于你提供的两个例子。 - John B
2个回答

13
在计算机编程中,完全限定名称是一个明确无误的名称,它指定了调用所引用的对象、函数或变量,而不考虑调用的上下文。在分层结构中,当名称“在给定元素上方的层次序列中包括所有名称”并且“包括给定元素本身的名称”时,名称就是完全限定的。因此,完全限定名称明确地引用了由于调用范围而隐含的命名空间。尽管总是为了消除歧义而这样做,但这可能因上下文而异。 来源维基百科
简而言之,这意味着您可以在项目中拥有一个名为“Math”的类,但Java中已经存在“Math”。因此,为了明确识别您实际引用的类,您需要用包限定名称。
java.lang.Math //refers to java class Math
org.myproject.Math //refers to your project Math class

当你想一想,每次我看到它时,它都被用来消除歧义。 - FutureSci

3

来自梅里亚姆-韦伯斯特词典

QUALIFY的完整定义

及物动词 1 a :将其从一般形式转换成特定或限制形式:修改 b :使更加柔和或宽松:缓和 c :改变强度或风味 d :限制或修改(如名词的)含义 2 :通过命名属性来表征:描述 3 a :通过培训、技能或能力为特定目的进行适应 b (1) :宣布有能力或足够:认证 (2):赋予法律能力:执照

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

例如:如果您有两个成员名称为“read”的类。

class Foo {
    void read();
};

class Bar {
    void read();
};

在您的实现文件中,您将实现两个函数。但是,如果您写了(C ++)
void read() {}

这是有效的,但它创建了一个全局命名空间中的函数,而不是实现其中两个函数之一。在类Foo定义内部编写相同的代码将实现Foo :: read。
因此,要在类定义外部实现成员函数,我们必须进行限定 - 从通用到特定的容器路径属性名称 - 来指定我们正在实现哪个read函数。
void Foo::read() {}
void Bar::read() {}

全局命名空间是“::”,因此您甚至可以明确地使用它,如果您想使用它:
void ::read() {}  // note: this name is already taken by stdio's read() :)

鉴于全局命名空间是匿名的,但在C++中并非如此。 "匿名命名空间"具有特定含义,特别是对于每个翻译单位它们都是不同的。全局命名空间在任何地方都是相同的命名空间。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接