推 QQ29:以上的 code 可以順利 compile、link 並執行<<<上面這邊我用 06/10 15:22
→ QQ29:VC的話 他link不到耶 所以我說他認不到... 06/10 15:22
我又必須為自己的衝動回文道歉了 XD
struct A;
struct B;
A* foo();
B* foo();
上述兩種版本的 foo() 具有相同的 function signature
所以它們無法 overload
上述的程式會發生 compile error
但 C++ 並未規定 name mangling 的方式
所以若是 compiler 讓 return type 也成為 name mangling 的一部份
也算是合理的做法
只要它能保證:
1. 參數型別不同的 function 具有不同的 symbol name
2. 宣告式完全吻合的 function 具有相同的 symbol name
3. 禁止具有相同 signature 的 function overloading
(這邊先不管 covariant return type)
VC 會把 return type 加入 name mangling 中
在 VC8 會把 FU* foo() 轉成 ?foo@@YAPAUFU@@XZ 的名稱
但 GCC 就不會包含 return type
FU* foo() 會變成 _Z3foov
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.151.2
※ 編輯: littleshan 來自: 219.87.151.2 (06/10 15:49)
推 QQ29:原來如此 受教了!!謝謝大大 06/10 17:01
推 lairrol:你多衝動幾次沒關係!!這樣可以造福有心學習的初學者 06/15 21:53