读完这个帖子后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&&吗?
不,你不应该一直使用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().