1

Scott Meyers Universal References in C++11を見たところ、よく理解できないことが 1 つあります。

auto「ユニバーサル参照」としての a 、つまりauto&&通常の a との違いについて少し混乱してautoいます。いつ違いますか?

Foo f;
Foo& lvr = f;

auto lvr_a = f; // Foo&
auto rvr_a = std::move(f); // Foo&& or is it Foo?

auto&& lvr_b = f; // Foo& && => Foo&
auto&& lvr_b = std::move(f); // Foo&& && => Foo&&
4

1 に答える 1

2

auto は値型に減衰します (つまり、コピー コンストラクターでコピーを取ります) が、auto&& は参照型を保持します。

ここを参照してください: C++11: const および参照型に対する「auto」のアクションの標準参照

auto rvr_a = std::move(f); // Foo&& or is it Foo?

それだけFooです。したがって、これは次と同じです。

Foo rvr_a = std::move(f); // Foo&& or is it Foo?

ただし、移動コンストラクターがある場合は、これが引き続き呼び出されることに注意してください。

于 2012-10-10T12:08:06.030 に答える