讲解之前,先来看一组代码
string read(); void print(const string &); void print(double); void fooBar(int ival) {bool read = false; // 新作用域:隐藏了外层的readstring s = read; // 错误: read是一个布尔值,而非函数// 为了给大家演示作用域,使用一个局部声明的函数,该写法并不鼓励void print(int val){ std::cout << val << std::endl; }; // 新作用域:隐藏了之前的printprint("Value: "); // 错误:print(const string &)被隐藏掉了print(ival); // 正确: 当前print(int)可见print(3.14); // 正确:调用print(int); print(double)被隐藏掉了 }
函数的查找分为名称查找和参数匹配(因为重载函数的数量相对较少,所以大部分查找过程并不需要参数匹配)
在C++当中,名字查找在类型检查之前进行。
简单的讲,内层的名称会掩盖外层的名称,而无论该名称是何类型(函数、变量、枚举)