1. 程式人生 > >名字查找先於類型檢查:函數重載與作用域

名字查找先於類型檢查:函數重載與作用域

重載 不同的 除了 sin stream ace cpp include span

作用域屏蔽名字:內層作用域中聲明的名字將隱藏外層作用域中聲明的同名實體

同名??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++中,名字查找發生在類型檢查之前

名字查找先於類型檢查:函數重載與作用域