次の C++11+ コードでは、どの return ステートメントの構造を優先する必要がありますか?
#include <utility>
struct Bar
{
};
struct Foo
{
Bar bar;
Bar get() &&
{
return std::move(bar); // 1
return bar; // 2
}
};
次の C++11+ コードでは、どの return ステートメントの構造を優先する必要がありますか?
#include <utility>
struct Bar
{
};
struct Foo
{
Bar bar;
Bar get() &&
{
return std::move(bar); // 1
return bar; // 2
}
};
私はオプション 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
。