関数があるとしましょう:
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()
を右辺値として扱う必要があるため、v の移動コンストラクターを呼び出す必要があるように思えますが、これが正しいかどうかは完全にはわかりません。