我们是否应该始终使用auto &&作为局部变量

Gui*_*e07 4 c++ auto c++11

读完这个帖子后auto&&,是否应该总是使用auto&&而不是auto当我们声明一个局部变量来捕获一个函数的返回类型时(为了完全保留函数返回的类型)?

例如,用例可以是

auto&& result = func_returning_lvalue_or_lvalue_reference();
Run Code Online (Sandbox Code Playgroud)

要么

auto&& iterator = vector_.begin();
Run Code Online (Sandbox Code Playgroud)

或其他任何东西.

换句话说,拥有大量基本代码是正常的auto&&吗?

nos*_*sid 6

不,你不应该一直使用auto&&.特别是,如果您需要副本,则不应使用它.随着auto&&你可能会得到一份(以临时对象的引用),或者你可能只是得到原始对象的引用.

例如:

auto&& name = customer.get_name(); // std::string or const std::string&
name.erase(name.find(' '));
Run Code Online (Sandbox Code Playgroud)

这段代码编译了吗?如果它编译,它是否会更改客户的名称,还是只对临时对象起作用?如果不看功能的签名,你无法分辨get_name().