[爆卦]c函式回傳是什麼?優點缺點精華區懶人包

為什麼這篇c函式回傳鄉民發文收入到精華區:因為在c函式回傳這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者wade1223 (于)看板C_and_CPP標題[問題] C++ 多載時間Mon May 20...



各位前輩好

我要問的是觀念

所以文章的預設內容我就不填了

小弟我搞不太懂多載的定義 (大概知道他的精神)

可是細部內容不是很懂



目前的觀念是 具備以下兩種條件就可以使用相同函式名稱進行多載

1. 不同的引數個數

EX : int fun(int,int) & int fun(int,int,int)

2. 不同的引數資料型別

EX : void fun(int,float) & void fun(float,float) & void fun(float,int)


而我的疑問在於回傳值的部分有影響嗎 ?

第一種情形 : 一樣的函數回傳值 , 相同的引數資料型態與不同的引數個數 (是多載)

第二種情形 : 一樣的函數回傳值 , 不同的引數資料型態與相同的引數個數 (是多載)

第三種情形 : 一樣的函數回傳值 , 不同的引數資料型態與不同的引數個數 (是多載)

第四種情形 : 不同的函式回傳值 , 相同的引數資料型態與相同的引數個數 ???

第五種情形 : 不同的函式回傳值 , 不同的引數資料型態與相同的引數個數 ???

第六種情形 : 不同的函式回傳值 , 相同的引數資料型態與不同的引數個數 ???

第七種情形 : 全部通通都不同 !!! ???

搞得我好混亂阿 !!!

比如說 :

EX4 : float fun(int,int) & int fun(int,int)

EX5 : float fun(int,int) & int fun(float,float)

EX6 : float fun(int,int) & int fun(int,int,int)

EX7 : float fun(int,float) & int fun(float,int,float)

組合太多種了 @@ 一整個混亂


最後題目來了 :


下列些是多載函式(複選) :

(A) int showData() {}
(B) String showData() {}
(C) int showData(int a) {}
(D) int showData(double a,int b) {}
(E) void showData(int a) {}
(F) double showData(double a,int b) {}


書上沒有答案 ~ 我自己的答案是 : C , D


好煩阿 懇請前輩們解惑

感激不盡


--
◢█◣ ██◣ ███ █◣ █◣ █◣ ══╤══
█▄ ◢◤
███ ◢◤ ◢◤ ◥◣ ═══╪══
████ ██◤ ███ ██ ██ █◤
████ █▄█ ◣ █▄ ▄ ▄◤ ( )
◥▄◤ █▄◤ █▃▃ █ █◤ █◤ ▄◣ ──╯ / >

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.70.200.246
AntaresStar:回傳值是不看的 也就是說你的第四種情形會不能編譯 05/20 23:38
AntaresStar:說不看也不太對...總之只有回傳值不一樣的話不是多載 05/20 23:41
chchwy:一句話: 僅有回傳值不同,參數全相同 是沒辦法通過編譯的 05/20 23:52
chchwy:建議可以自己動手敲一下程式碼 05/20 23:53
purpose:fun(int) 編譯器會把名稱改成 funci,而 fun(float) 會被 05/21 00:01
purpose:編譯器改名為 funcf,透過這種藉由 arg list 資訊的名稱 05/21 00:01
purpose:修飾,來滿足 "名稱不可同名" 這個類似憲法的需求 05/21 00:03
loveme00835:從編出來的組語理解 05/21 00:55
maerdimer:直接用想的,如果你要寫 compiler,你要怎麼分辨 05/21 01:24
maerdimer:回傳值不同的兩個函式 05/21 01:25
amozartea:不能有兩種回傳值 05/21 03:16
amozartea:否則你會有not well-defined 函數 05/21 03:17
bachelorwhc:實作上,重載函式compiler產生的是完全不同的函式名稱 05/21 12:18
bachelorwhc:你可以用IDE去看Gobbledygook,後面會有一些碼 05/21 12:22
bachelorwhc:函式回傳值不同,就像是同名不同型變數宣告失敗的道理 05/21 12:23
CaptainH:如果你重載了 int fun() 和 float fun(), 那麼你寫 05/21 15:23
CaptainH:"fun();" 時該呼叫哪一個呢? 05/21 15:23
wade1223:好像有點通了 感謝大家 05/21 15:39
suhorng:所以這是C++型別系統先天的限制嗎? 05/21 20:18
suhorng:如果我的回傳值型態是兩種根本不可能互相cast的也是? 05/21 20:19
AstralBrain:c++只是不想做 而不是不能做 05/21 20:26
AstralBrain:有個很惡搞的做法 http://ideone.com/TdXR8n 05/21 20:31
AstralBrain:所以overload resolution的時候判斷回傳值在技術上是 05/21 20:32
AstralBrain:可行的 05/21 20:33
legnaleurc:這樣 return type 還是綁死 Foo 吧? 05/21 23:02
AstralBrain:是啊 所以說是惡搞的做法XD 05/21 23:38
AstralBrain:只是想說compiler有能力拿等號左邊的東西去決定 05/21 23:39
AstralBrain:等號右邊要call哪個函數 05/21 23:39
hilorrk:這樣看起來轉型還真的很像 function 呼叫XD 05/21 23:51

你可能也想看看

搜尋相關網站