【问题标题】:Difference between name lookup and name binding in C++C ++中名称查找和名称绑定之间的区别
【发布时间】:2017-04-03 23:05:45
【问题描述】:

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

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

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

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

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

但是,C++ 标准中关于重载解决的第 (13.3) 节经常提到绑定,但没有定义它。在此上下文中使用“绑定”的方式使得绑定似乎是指参数与函数参数的关联。

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

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

【问题讨论】:

  • “但是,C++ 标准中关于重载解决的第 (13.3) 节经常提到绑定”但不是名称绑定,它在整个文档中只使用一次,可能是一个错误。

标签: c++ binding name-lookup


【解决方案1】:

阅读了 Wilson & Clark Comparative Programming Languages 的相关部分后,我想我对该主题有了更好的理解。如果我猜对了,“绑定”一词涵盖了一系列相关术语,包括名称-声明绑定、名称-类型绑定、声明-引用绑定、引用-值绑定和名称-值绑定。

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

如果我错了,请纠正我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多