亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過const值返回的目的?

通過const值返回的目的?

C++
MMTTMM 2019-08-12 16:16:45
通過const值返回的目的?const的目的是什么?const Object myFunc(){     return myObject;}我剛剛開始閱讀Effective C ++,而第3項提倡這一點,Google搜索也提出了類似的建議,但也有反作用。我看不出在這里使用const會更好。假設需要按值返回,我認為沒有任何理由保護返回的值。給出為什么這可能有用的示例是防止返回值的意外bool強制轉換。實際問題是應該使用explicit關鍵字來防止隱式bool強制轉換。在這里使用const可以防止在沒有賦值的情 所以我無法用這些對象執行算術表達式。似乎沒有一個未命名的const有用的情況。在這里使用const可以獲得什么,何時更可?。烤庉嫞簩⑺阈g示例更改為修改在分配之前可能要執行的對象的任何函數。
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

在假設的情況下,您可以對對象執行可能昂貴的非const操作,通過const-value返回可以防止您意外地在臨時上調用此操作。想象一下,+返回一個非const值,你可以寫:

(a + b).expensive();

然而,在C ++ 11時代,強烈建議將值返回為非const,以便您可以充分利用rvalue引用,這僅對非常量rvalues有意義。

總之,就是這種做法的理由,但它本質上是過時的。


查看完整回答
反對 回復 2019-08-12
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

從函數返回一個值是沒有意義的const

要讓它對您的代碼產生任何影響是很困難的

const int foo() {
   return 3;}int main() {
   int x = foo();  // copies happily
   x = 4;}

并且

const int foo() {
   return 3;}int main() {
   foo() = 4;  // not valid anyway for built-in types}// error: lvalue required as left operand of assignment

雖然您可以注意到返回類型是否是用戶定義的類型

struct T {};const T foo() {
   return T();}int main() {
   foo() = T();}// error: passing ‘const T’ as ‘this’ argument of ‘T& T::operator=(const T&)’ discards qualifiers

這是否對任何人都有好處值得懷疑。

返回引用是不同的,但除非Object是某些模板參數,否則您不會這樣做。


查看完整回答
反對 回復 2019-08-12
  • 3 回答
  • 0 關注
  • 485 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號