14

次の C++11+ コードでは、どの return ステートメントの構造を優先する必要がありますか?

#include <utility>


struct Bar
{
};

struct Foo
{
    Bar bar;

    Bar get() &&
    {
        return std::move(bar); // 1
        return bar;            // 2
    }
};
4

3 に答える 3

4

私はオプション 3 を好みます。

Bar&& get() &&
// ^^
{
    return std::move(bar);
}

そして、私たちがそれに取り組んでいる間:

Bar& get() & { return bar; }
Bar const& get() const& { return bar; }
Bar const&& get() const&& { return std::move(bar); }

私たちは右辺値なので、リソースを自由に共食いする必要があるため、move-ingbarは正しいです。しかしbar、移動を受け入れているからといって、そのような移動を義務付けて余分な操作を行う必要があるわけではありません。したがって、移動へ​​の右辺値参照を返すだけでよいのです。

これが標準ライブラリのやり方ですstd::optional<T>::value

于 2018-01-29T16:16:39.620 に答える