は戻り値を渡すことによりrvalue基準c++0x?
-
19-09-2019 - |
質問
ということかして機能:
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
なC++0x具体的に言うの擬することでより回避からの戻り値randomVector?やコンパイラを実装する必要があるとのRVO?となっているように思いの価値 randomVector()
りさせていただきますrvalue、このようにvの動きのコンストラクタを呼び出す必要があがんなっくあげてしまう事になります。
解決
の規則は、以下の
- の場合はコンパイラでRVO、そのせいで、コピーや移動します。
- そうしないと、適切なコンストラクタが取得されます。
のように言いますと、一時はrvalue、このコンストラクタを選択したのでルール 13.3.3.2/3
, る化を実現していることをrvalue参考に結合し、rvalueよりlvalueます。決定を使用するか否かの移動やコピーコンストラクタ過負荷解決の方法を好みのコンストラクタです。
ルールをコンパイラが可能にRVOで 12.8/15
.
他のヒント
すべての戻り値は、コンパイラは、このような場合にRVOを実装していない場合には、コピーコンストラクタではなく、移動のコンストラクタを使用する必要がありますので、rvalues
していると考えられる。
所属していません StackOverflow