Koening Lookup
也就是 C++ 函数名字的两阶段查找,模板实例化之前和实例化之后。
C++每个类对象都有一个名字空间,而非类对象,比如 int, char, long, char*….,没有关联的名字空间。 有关联名字空间的参数,在名字查找时会将这个 namespace 的同名函数加入备选集合。
所有名字查找都结束了,这才开始重载解析,选一个最匹配的函数,这个重载解析,也非常复杂,不过,这不属于 namelookup,是 overload resolution….
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <stdio.h> template<class T> void foo(T) { printf("%s\n", __PRETTY_FUNCTION__); } struct A {}; struct B : A {}; void foo(A) { printf("%s\n", __PRETTY_FUNCTION__); } int main() { foo(A()); return 0; } |