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

Posted GGBeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了名字查找先于类型检查:函数重载与作用域相关的知识,希望对你有一定的参考价值。

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

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

以上是关于名字查找先于类型检查:函数重载与作用域的主要内容,如果未能解决你的问题,请参考以下文章

函数重载

函数重载

函数重载

函数重载

成员函数的重载,覆盖与隐藏

OOP3(继承中的类作用域/构造函数与拷贝控制/继承与容器)