[問題] C++ pass by reference type mismatch …

看板C_and_CPP (C/C++)作者 (Ollie)時間15年前 (2011/03/29 11:38), 編輯推噓3(308)
留言11則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC(g++) 4.5.2 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我在看 C++ primer 的時候, 其中有說到當 reference 型態不符的時候, 除非 parameter 有加 const, compiler 才會使用型態正確的暫時變數初始化完後再 賦值給 parameter, 否則 compiler 就會回報錯誤. 接著後來書上又講到 swap 這個例子, 可以不用加 const compiler 就會自己使 用暫時變數. 所以我自己試了一下, 發現只要函式取名為 swap (大小寫完全一樣) compiler 就會自己使用暫時變數, 而只要函式名稱有稍微變動就會回報錯誤, 所以我想知道的是 swap 這個詞在 C++ 或者對 compiler 來說有甚麼特殊意義嗎. 且造成這個現象的原因是甚麼. 謝謝大家. 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/JLhwuo0b 函式名稱改成 swa, sWap, test, SWAP 等就會回傳錯誤 補充說明(Supplement): 編譯的選項是 -g -Wall -Wextra -pedantic swap 函式並不用真的做 swap 的動作, 只要符合 void swap(type& a, type& b) 這樣的形式就可以, 我用更早版本的 g++ 編譯標準更寬鬆, 只要名字是 swap 就可以. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.189.226 ※ 編輯: Minilogo 來自: 61.227.189.226 (03/29 11:54)

03/29 11:47, , 1F
是有個內建函式叫做 std::swap
03/29 11:47, 1F

03/29 11:54, , 2F
原因可能是 using namespace std; 吧
03/29 11:54, 2F

03/29 11:58, , 3F
謝謝樓上兩位^^ 好像是template 我還沒看到
03/29 11:58, 3F

03/29 11:59, , 4F
的確是 std 裡面的 swap
03/29 11:59, 4F

03/29 11:59, , 5F
當你名字叫做swap的時候,根本就是呼叫內建的那個swap
03/29 11:59, 5F

03/29 12:00, , 6F
而沒有用到你的swap. 你可以試試看在你的swap裡加個cout
03/29 12:00, 6F

03/29 12:05, , 7F
Visual Studio 點程式碼上的 swap 按右鍵選「移至定義」
03/29 12:05, 7F

03/29 12:06, , 8F
回J大 如果我的swap是其他的操作的話就warning且結果錯誤
03/29 12:06, 8F

03/29 12:06, , 9F
也可以用點 swap->編輯->IntelliSense->快速諮詢,查詢
03/29 12:06, 9F

03/29 12:07, , 10F
這兩點倒是用 IDE 寫程式碼的好處
03/29 12:07, 10F

03/29 13:12, , 11F
我了解了 謝謝所有回答的人喔^^
03/29 13:12, 11F
文章代碼(AID): #1DaLGj2p (C_and_CPP)
文章代碼(AID): #1DaLGj2p (C_and_CPP)