12

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)

4

1 に答える 1

14

それらは同等ではなく、常に使用する必要がありますreturn t;

より長いバージョンでは、return ステートメントが戻り値の最適化に適格である場合にのみ、returnee が右辺値参照にバインドされます (または、口語的には「themoveは暗黙的です」)。

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

于 2013-04-12T21:35:37.127 に答える