名字查找先於類型檢查:函數重載與作用域
阿新 • • 發佈:2018-03-24
重載 不同的 除了 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++中,名字查找發生在類型檢查之前
名字查找先於類型檢查:函數重載與作用域