关于本章
1、当我们开始思考name lookup,其实是在思考compiler的行为。
2、compiler使用**tree结构**来表示program,这是一种hierarchy结构,所以compiler在进行name lookup的时候,也是沿着tree进行的,可以参考龙书的chapter 3
。
3、name lookup是由compiler在compile-time完成的,由于C++语言的复杂性,name lookup过程也是非常复杂的,它涉及到了非常多的内容,对C++ name lookup过程有所了解,能够帮助我们理解C++语言中的很多问题;
4、C++是复杂的,这就导致我们很难准确地、完整地描述清楚它的name lookup过程,而是需要结合具体的例子来进行说明。
Compile error
很多compile error都可以追溯到name lookup,因此掌握name lookup是解决很多compile error的前提。
Implementation of static polymorphism is based on the result of name lookup
本节标题的含义是:static polymorphism是基于name lookup的结果,关于static polymorphism,参见C++\Guide\Implementation-of-polymorphism
。
下面对这个观点进行详细解释:
static polymorphism | 实现章节 | |
---|---|---|
template | C++\Language-reference\Template\Implementation |
|
overload | C++\Language-reference\Functions\Overload-resolution |
compiler首先执行name lookup,从而得到candidates,然后从candidates选择出 best one。
Function name lookup
在name lookup中,一个非常重要的主题就是:对function的lookup。
Function name lookup还涉及到的内容有:
1、ADL
2、Elaborated type specifier
3、using
下面是涉及function name lookup的好文章:
1、文章gotw Namespaces and the Interface Principle中对此进行了描述