為什麼不把要返回元素直接當成函式的返回值返回呢?

時間 2021-05-31 10:36:30

1樓:phoenix

bool get(elem&)

elem& get() throw

elem& get(bool&)

回字的四種寫法

iter get()

tuple get()

想到再加

2樓:ant

有些時候乙個返回不夠用啊,函式中好幾個值需要傳出時只能通過引數傳遞實現,而不能簡單的通過函式返回值。

當然,你也可以設計乙個資料結構,將所有需要傳出來的值都放在結構中,但這樣不利於使用

3樓:

不考慮異常的話, 這樣呼叫者可以自己造乙個物件池, 減少構造的開銷.

比如, 乙個函式是把100轉成"100", 每次都返回乙個std::string, 不如讓呼叫者傳入乙個std::string &或者std::

string *, 然後將結果填充進去.

4樓:

c語言風格 c語言基本沒異常處理所以返回狀態上級通過執行狀態就知道正常還是不正常

當然如果其他高階語言也可以返回元素的值或者引用執行失敗丟擲異常

5樓:犹豬號上的士官長

誰說的,我就喜歡直接返回值。std:move,資源在底下安全的傳遞,多舒服。返回指標,要不要銷毀?指標什麼時候會變成野指標?用起來多彆扭啊

6樓:Sicnu-didiyu

學習資料結構的話,你暫時不必關注語法細節,重在熟悉資料結構的產生的場景,改進的過程。

另外,對於你的問題,其他人都回答得很好了。

簡單的說,不同程式語言都需要有異常處理的功能,因為實際工作中我們需要在處理完業務流程中的大部分異常情況之後才敢把軟體交付給客戶。

另外,不同語言的異常處理機制都有點不同,但是這些機制都需要區分已知錯誤和未知錯誤,進而區別處理。

7樓:

前面的答主已經說的差不多了。需要明確的概念是,傳入函式的引數不一定都是入參,也常常作為出參。

實際上,乙個函式有入參,出參,和返回值,出參不一定是返回值。而且隨著不斷應用發現,返回值往往不作為出參,而只是作為判斷該函式的執行狀態,這個比較常見。

8樓:

具體情況具體分析,出現這種情況是因為C/C++不支援返回多個變數。

試想一下,你正在寫乙個C函式,把字串轉換成整數,比如可以把"123"轉換為123,你如何設計它?

使用者可能會輸入錯誤的字串,比如"abc",此時應該清晰指出轉換是否成功,同時,如果成功又要返回轉換後的整數。但是C不支援返回多個變數,於是有2種設計思路:

bool str2int(const char*, int *); //int*返回被解析後的整數,bool表示轉換是否正確

int str2int(const char*, bool*); //bool*表示是否轉換正確,同時返回乙個整數

到了C++就更簡單了:

int str2int(const char*);

如果轉換失敗,可以直接丟擲乙個異常。

9樓:lowxiong

單就此函式而言:由於存在要查詢的元素不存在的情況,直接返回元素值不好區分,所以該函式就使用第三個引數用於接受查詢到的元素值,而返回值用於區分是否存在該元素。

當然,有時候為簡化函式,也可以按題主的要求返回元素值,比如題主可以根據自己專案所用的資料範圍外的值來區分是否存在該元素,也可以使用概率如「12345678」這個數大概率不會出現的方法來區分(這樣做,專案發布後很可能成為乙個隱藏極深又致命的bug).

ThinkPad 為什麼不把鍵盤的設計直接賣給其他廠商呢?

thinkpad的鍵盤有年頭了,專利差不多過期了,所以做出來雖然有成本,但是也不是天價。歸根到底,做這麼個鍵盤對賣電腦幫助不大說實話,thinkpad鍵盤很多時候是有品牌信仰加成的,thinkpad有粉絲,粉絲要吹產品,thinkpad最適合被吹的就是有一定優勢的鍵盤,所以鍵盤被吹的最多,評價超過了...

零餘額賬戶為什麼要函證?

我覺得這個得看銀行賬戶的性質來判斷重大錯報風險比如普通存款賬戶 臨時戶,尤其是一些小企業可能有一些當初財務個人開立的銀行賬戶,後來財務離職了這個個人賬戶就留了幾塊餘額甚至是零餘額,企業也沒辦法操作,審計師也無法向銀行函證,如果最後評估下來錯報風險很小並且實施了替代程式,是可以不函證。但像保證金 貸款...

為什麼不把塔羅斯2行星直接炸掉?

萬機之神神選多拉考爾 因為在泰拉看來,那只能算是衝突,想奪回來還能奪回來。帝國對滅絕令的使用的審核還是比較嚴格的,因為執行滅絕令的成本很高。塔羅斯2的嚴重性跟蟲子和百戰百勝比不了,漁民更不算什麼心腹之患,不需要下滅絕令。像弗拉克斯和哈公尺吉多頓,都快成惡魔世界的時候都沒下滅絕令 附40K貼吧裡的滅絕...