質問

A 前の質問, で登場するキ返しによる価値機能は常にそのコピー return 引数の変数に割り当てているからです。

この基準で機能を最適化することにより構築に割り当てを変数内においても機能がありますか。

struct C { int i; double d; };

C f( int i, int d ) {
    return C(i,d); // construct _and_ copy-construct?
}

int main() {
    C c = f( 1, 2 ); 
}
役に立ちましたか?

解決

標準のできるレベルのコピーを省略。

  • を構築し地域の一時的なもので、コピーを構築すると返り値が、コピーを構築する戻り値の"c" または
  • を構築し地域の一時的なもので、コピーを構築することを"c" または
  • の構築"c"の議論i、d"

他のヒント

標準では、コピーコンストラクタを使用する必要がないことを言う - セクション12.8 / 15を参照してください。

  

15時はいつでも、一時的なクラスオブジェクト   コピーコンストラクタを使用してコピーされ、   このオブジェクトとコピーが持っています   同じCV-修飾されていないタイプ、   実装は、治療のために許可されています   2として、オリジナルとコピー   を参照の異なる方法   同じオブジェクトとないでコピーを実行   すべて、たとえクラスのコピー   コンストラクタまたはデストラクタは側面を持っています   効果。

と同様の静脈ではるかます。

ウェイ参照によってパラメータを渡すと、それに結果を割り当てない?

完全にそのような考慮を回避するための1つの非常にシンプルで良い方法があります - あなたはブーストを返すことを検討することができます::作成したオブジェクトへのshared_ptr - それはユーザビリティに来るが、あなたのオブジェクトは確実に不必要にコピーされないとき、それは実質的に同じになります - それはあなたが関数呼び出しのカップル層ものの、それを返す場合もtrueになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top