1

我刚刚看了C++11 中的Scott Meyers通用引用,有一件事情我不太明白。

我对auto作为“通用参考”auto&&的 a 和常规的 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:标准引用,用于 `auto` 对 const 和引用类型的操作

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 回答