次のコードを書きました。
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か?いいえの場合、これを行わない理由は何ですか? どのような場合に、この最適化を実装するのが難しいか、可能であると推測し、ここで修正するかなど...?