次のコードを書きました。
class MyObjectHolder {
public:
std::vector<int> getMyObject() const {
return myObject;
}
private:
std::vector<int> myObject;
};
プログラムのある時点で、メソッドを使用しようとし、取得したオブジェクトに対してメソッドgetMyObject
のみを使用します。const
const std::vector<int> myObject = myObjectHolder.getMyObject();
myObject.size();
int a = myObject.front();
さて、コンパイラがこのコードを最適化して、コピー
std::vector<int>
が行われないようにすることは可能でしょうか?コンパイラーが
const
、取得したオブジェクトのメソッドのみを使用していると判断し (その背後でナンセンスが発生していないと仮定しましょうmutable
) 、オブジェクトのコピーを作成せず、これらのconst
操作をprivate
メンバーに対して実行する可能性はありますか?MyObjectHolder
代わりに?const std::vector<int> myObject
はいの場合、 as を明示的に宣言しなければ可能でしょうconst
か?いいえの場合、これを行わない理由は何ですか? どのような場合に、この最適化を実装するのが難しいか、可能であると推測し、ここで修正するかなど...?