通過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有意義。
總之,就是這種做法的理由,但它本質上是過時的。

一只斗牛犬
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
是某些模板參數,否則您不會這樣做。
- 3 回答
- 0 關注
- 485 瀏覽
添加回答
舉報
0/150
提交
取消