作用域屏蔽名字:内层作用域中声明的名字将隐藏外层作用域中声明的同名实体。
同名??C++有关同名的除了变量之外,也就是函数重载了!!
【作用域对于函数重载的限制】
1. 在不同的作用域中无法重载函数名
2. 函数匹配时,编译器首先寻找对该函数名的声明,一旦在当前作用域中找到了所需的名字,编译器就会忽略掉外层作用域中的同名实体,剩下的工作就是检查函数调用是否有效了
#include <iostream> using namespace std; void print(double); void print(string); int main() { int a = 10; double d = 3.14; string s = "hello"; void print(int); // 隐藏外面作用域的print print(a); print(d); // 调用的是print(int),输出3 // print(s); // 错误:print(string)被隐藏掉了 return 0; } void print(int x) { cout << x << endl; } void print(double x) { cout << x << endl; } void print(string x) { cout << x << endl; }
小结:在C++中,名字查找发生在类型检查之前