C++中名称查找和名称绑定之间的区别
Difference between name lookup and name binding in C++
在C++中,名称绑定和名称查找之间有区别吗?工作草案 C++14 标准 (N4296) 将 (3.4) 中的名称查找定义为
名称查找将名称的使用与该名称的声明 (3.1) 相关联。
我在标准中找不到名称绑定的定义,但 IBM 知识中心针对其 XL C/C++ 编译器的文档定义了:
名称绑定是为模板中显式或隐式使用的每个名称查找声明的过程。
这两个定义之间的唯一区别似乎是 (1) 名称绑定专门指模板中使用的名称,(2) 名称绑定是指名称,而名称查找是指名称的使用。
但是,C++标准中关于过载分辨率的第 (13.3) 节经常提到绑定,但没有定义它。 在此上下文中使用"绑定"的方式使得绑定似乎是指参数与函数参数的关联。
起初,这个定义似乎与其他两个定义中的任何一个都不同,如果我们假设函数的名称通过比较参数和参数的类型绑定到其声明,则认为它符合(广泛)名称查找的定义。 这并不完全是第 (13.3) 节中使用的意义,但我试图在没有正确定义的情况下理解标准。
简而言之,如果有人对"名称绑定"或"绑定"有一个很好的定义,我将不胜感激。
阅读了Wilson & Clark比较编程语言的相关部分后,我想我对这个主题有了更好的理解。 如果我猜对了,术语"绑定"涵盖了所有相关术语,包括
名称声明绑定、名称类型绑定、声明引用绑定、引用值绑定和名称值绑定。"名称查找"似乎是名称声明绑定的同义词。 C++14标准中"绑定"的其他用途涉及其他绑定品种的各种组合。
如果我错了,请纠正我!
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?