自动型扣除和汽车&& vs汽车

时间:2012-10-10 11:38:15

标签: c++ c++11 rvalue-reference type-deduction

我刚看了Scott Meyers Universal References in C++11,有一件事我不太明白。

我对auto作为“通用参考”(即auto&&和普通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&&

1 个答案:

答案 0 :(得分:2)

auto会衰减到值类型(即使用复制构造函数复制),而auto&&将保留引用类型。

见这里:C++11: Standard ref for action of `auto` on const and reference types

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

只是Foo。所以这与:

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

但请注意,如果存在构造函数,它仍然会调用它。