名字查找先于类型检查:函数重载与作用域

作用域屏蔽名字:内层作用域中声明的名字将隐藏外层作用域中声明的同名实体

同名??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++中,名字查找发生在类型检查之前

posted @ 2018-03-24 14:34  GGBeng  阅读(247)  评论(0编辑  收藏  举报