看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《littleshan (我要加入劍道社!)》之銘言:
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