2013-04-12 11 views
12

std :: move(x)を返すかしないか?

std::vector<double> foo() 
{ 
    std::vector<double> t; 
    ... 

    return t; 
} 

std::vector<double> foo() 
{ 
    std::vector<double> t; 
    ... 

    return std::move (t); 
} 

同等か?

さらに正確には、return xはいつもreturn std::move (x)に相当しますか?

答えて

14

これらは同等ではないため、常にreturn t;を使用してください。

戻り値が戻り値の最適化に適格である場合にのみ、戻り値はrvalue参照にバインドされます(つまり、「moveは暗黙的」です)。

しかし、return std::move(t);をスペルアウトすると、実際には戻り値の最適化が禁止されます。