1. ホーム
  2. c++

[解決済み] const値で返す目的?重複

2022-04-28 11:33:59

質問

これのconstは何のためにあるのでしょうか?

const Object myFunc(){
    return myObject;
}

私はちょうど Effective C++ を読み始めたところで、項目3がこれを提唱しており、Google で検索すると同様の提案と反例がヒットします。ここでconstを使うのが望ましいとは到底思えません。値で返すことが望ましいと仮定して、返された値を保護する理由が見当たりません。なぜこれが役に立つかの例として、返り値の意図しないブールキャストを防ぐことが挙げられています。実際の問題は、暗黙のブールキャストは明示的なキーワードで防ぐべきということです。

ここでconstを使用すると、一時的なオブジェクトを代入せずに使用することができなくなります。だから、そのオブジェクトを使って演算式を実行することができなかった。無名constが便利なケースはなさそうですね。

ここでconstを使うことで何が得られるのか、どのような場合にそれが望ましいのか。

編集:算術の例を、代入の前に実行したいような、オブジェクトを修正するあらゆる関数に変更します。

どのように解決するの?

オブジェクトに対して高価な非定数演算を行う可能性がある場合、const値で返すことで、誤ってテンポラリに対してこの演算を呼び出すことを防ぐことができます。例えば + はconst値でない値を返し、あなたはこう書くことができます。

(a + b).expensive();

しかし、C++11の時代には、値をnon-constで返すことを強く推奨します。そうすれば、rvalue参照を最大限に活用することができ、rvalueが一定でない場合にのみ意味を持ちます。

まとめると この慣習には根拠がありますが、本質的には時代遅れです。