作者ggegge (Egg)
看板EE_DSnP
標題[討論] 神奇的()
時間Tue Dec 23 22:08:51 2008
今天下午,經過了郝柏翔以及陳韋翰的一起討論,我們發現了驚人的事實:
請先看看以下的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