我们是否应该始终使用 auto&&&for 局部变量
Should we always use auto&& for local variable
在阅读了这个线程auto&&
之后,这是否意味着当我们声明一个局部变量来捕获函数的返回类型(以准确地保留函数返回的类型)时,我们应该始终使用auto&&
而不是auto
?
用例可以是例如
auto&& result = func_returning_lvalue_or_lvalue_reference();
或
auto&& iterator = vector_.begin();
或其他任何东西。
换句话说,有一个包含大量auto&&
的基本代码是正常的?
否您不应该一直使用auto&&
。特别是,如果你需要一份副本,你不应该使用它。使用auto&&
,您可能会得到一个副本(作为对临时对象的引用),也可能只得到对原始对象的引用。
例如:
auto&& name = customer.get_name(); // std::string or const std::string&
name.erase(name.find(' '));
这段代码能编译吗?如果它进行编译,它会更改客户的名称,还是只对临时对象起作用?如果不看函数get_name()
的签名,就无法判断。
否它有时会导致未定义的行为。
void f()
{
string a{"a"};
string b{"b"};
auto&& c = move(a+b);
...
}
c将比a+b产生的临时寿命长。还有其他方法可以解决这个问题。
相关文章:
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- C++:带有 "auto" 的二维数组上的嵌套 For 循环
- 'for (auto c : str)' c到底是什么?
- 为什么在这个例子中有"for(auto& x : v)"而不是"for(auto x : &v)"?
- 请解释代码块"for(auto &it : iostr )"
- for (auto&a : a) 在语法上是正确的吗?
- 为什么基于范围的 for 语句通过 auto&& 获取范围?
- 有什么理由不使用 auto& 进行C++基于范围的 for 循环?
- for(auto&x:unordered_map变量) - 此语句抛出错误
- "for (auto&e : a)"比"for (auto&e : a)"更有效吗?
- 在基于嵌套范围的 for 循环中使用 auto(用于迭代)
- 在 for-each 循环中使用 'auto' 时是否需要添加'const'?
- 强制auto为range for循环中的引用类型
- 使用"for(auto&e : cont)"安全吗?矢量有什么问题<bool>?
- auto在基于范围的for循环中是可选关键字吗?
- 在 S 被解析为 for(auto &s :text)后,S 应该是什么类类型?
- 澄清使用for(auto iter: value)遍历映射
- 我们是否应该始终使用 auto&&&for 局部变量
- 是否可以替换(自动 i=0;i<n;i++) ... with for(auto i:<something>) 而不使用向量?