看板 EE_DSnP 關於我們 聯絡資訊
今天下午,經過了郝柏翔以及陳韋翰的一起討論,我們發現了驚人的事實: 請先看看以下的code: (不要懷疑 它是可以compile的) 1 #include <iostream> 2 using namespace std; 3 4 int main (int argc, char const* argv[]) 5 { 6 int y(int a=10); 7 y(); 8 int t(); 9 t(); 10 return 0; 11 } 12 13 int t(){ 14 int y(int a=0); 15 cout << "In t():"; 16 y(); 17 } 18 19 int y(int x){ 20 cout << "In y():" << x << endl; 21 } 大家請先猜一猜執行結果? Ans : In y():10 In t():In y():0 基本上這個情況大大顛覆了我們(至少是我啦)對function prototype的認知,由測試(nm) 可以知道,function prototype在編譯之後是不存在的,基本上只是幫助compile認知呼 叫function是否正確的工具,因此在不同的scope可以有重複的宣告(還可以有不同的 default value)。(基本上,全域還會屏蔽function內的,要用::y() access) 這是我對這個問題的認知,如果不對的話請多多指教。 ※ 編輯: ggegge 來自: 124.11.65.12 (12/23 22:10)
johnathan717:這就是為什麼即使有default value,還是不能宣告 12/23 22:12
johnathan717:IntArray a(); 因為這會被當成一個函數的prototype 12/23 22:13
johnathan717:參數是void,return type是IntArray 12/23 22:16
johnathan717:晚一點陳韋翰應該會來po華麗版的code 12/23 22:17
johnathan717:感謝兩位同學幫我研究了一個下午XD 12/23 22:18