我刚看了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&&
答案 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?
但请注意,如果存在构造函数,它仍然会调用它。