名字查找先于类型检查:函数重载与作用域
作用域屏蔽名字:内层作用域中声明的名字将隐藏外层作用域中声明的同名实体。
同名??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++中,名字查找发生在类型检查之前

浙公网安备 33010602011771号