C ++中名称查找和名称绑定之间的区别

时间:2017-04-03 23:05:46

标签: c++ binding name-lookup

在C ++中,名称绑定和名称查找有区别吗?工作草案C ++ 14标准(N4296)将(3.4)中的名称查找定义为

  

名称查找将名称的使用与该名称的声明(3.1)相关联。

我在标准中找不到名称绑定的定义,但是他们的XL C / C ++编译器的IBM Knowledge Center文档定义了:

  

名称绑定是为模板中显式或隐式使用的每个名称查找声明的过程。

两个定义之间的唯一区别似乎是(1)名称绑定专指模板中使用的名称,(2)名称绑定是指名称,而名称查找是指使用< / em>一个名字。

但是,关于C ++标准中的重载决策的部分(13.3)经常提到绑定,但没有定义它。在这种情况下使用“绑定”的方式使得绑定似乎是指参数与函数参数的关联。

首先,这个定义似乎与其他两个定义中的任何一个都不同,如果我们假设函数的名称被绑定到它的名称,它认为它(广泛地)符合名称查找的定义。通过比较参数和参数的类型来声明。这不完全是第13.3节中使用的意义,但我试图在没有正确定义的情况下理解标准。

简而言之,如果有人对“名字绑定”或“绑定”有一个很好的定义,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

阅读了Wilson&amp; Sons的相关部分。 Clark 比较编程语言,我想我对这个主题有了更好的理解。如果我猜测正确,术语“绑定”涵盖了一系列相关术语,包括名称声明绑定,名称类型绑定,声明引用绑定,引用值绑定和名称 - 值绑定。

“名称查找”似乎是名称声明绑定的同义词。 C ++ 14标准中“绑定”的其他用途涉及其他各种绑定的各种组合。

如果我错了,请纠正我!