RVO と NRVO が新しい C++11 移動演算子と共にどのように機能するかを理解しようとしています。いくつかの例を含むダミー クラスを起草しました。
編集: コードの最も重要な部分のみが表示されます。
完全なソース コードはこちらから入手できます。
クラスを参照として取得し、値または参照を返す 2 つの関数があります。
VOpt& fChangeClassRetRef(VOpt &m) {
m.setX(21);
return m;
}
VOpt fChangeClassRetValue(VOpt &m) {
m.setX(21);
return m;
}
これらの関数を呼び出すと、出力として次のようになります。
VOpt &m14 = fChangeClassRetRef(m13);
m14 = fChangeClassRetRef(m11);
-> Copy Assignment Operator
m14 = fChangeClassRetValue(m11);
-> Copy Constructor
-> C++11 Move Operator
左辺値参照が使用されている場合、コピー コンストラクターは呼び出されません。それ以外の場合、それらの関数 (パラメーターとして参照を受け取る) は引き続きコピー コンストラクターを呼び出します。
この機能はコンパイラに依存していますか? 私は何か間違ったことをしていますか?