几乎总是 decltype(auto)
Almost Always decltype(auto)?
decltype(auto)
可以推导出一个值和一个引用。 auto
从不推断出参考。在我看来,通用代码和优化decltype(auto)
应该始终是首选。是这样吗?例如,考虑返回一个可能可复制也可能不可复制的对象。 auto&
需要避免复制它,但这迫使它始终是引用。 在这种情况下,decltype(auto)
是正确的选择。除了打字更多之外,decltype(auto)
还有什么缺点?
来自 isocpp C++14 关于 decltype(auto)
的常见问题解答:
注意:decltype(auto) 主要用于推断转发函数和类似包装器的返回类型,如上所示,您希望类型精确地"跟踪"您正在调用的某个表达式。但是,decltype(auto)并不打算成为除此之外广泛使用的功能。特别是,尽管它可用于声明局部变量,但这样做可能只是一个反模式,因为局部变量的引用性不应依赖于初始化表达式。此外,它对你如何编写 return 语句很敏感。这两个函数具有不同的返回类型。
look_up_a_string_1
返回一个string
,而look_up_a_string_2
返回一个string&
。
decltype(auto) look_up_a_string_1() { auto str = lookup1(); return str; }
decltype(auto) look_up_a_string_2() { auto str = lookup1(); return(str); }
相关文章:
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 在扣除自动之前使用decltype(auto) <func>
- decltype(auto) 是否使尾随返回类型过时?
- 用 decltype 和 auto 推导出 const(返回)类型
- 在 decltype(auto) 的情况下,lambda 是否有特殊规则?
- "decltype(auto)"变量是否有任何实际用例?
- decltype(auto) 类型演绎:返回 x 与返回 (x)
- 在 C++14 中使用 decltype(auto) 声明静态数据成员
- C++ decltype(auto) or decltype(std::<T>forward(value))?
- 为什么从右值整数向量的元素中推导 decltype(auto) 的类型是 int&?
- C++11 中的 decltype(auto) - 推断返回类型
- 'auto f(params) -> decltype(..., void())' 中的 'void()' 是做什么的?
- 为什么 decltype 在 "auto returning" 函数中是必需的?
- 什么时候应该使用 decltype(x) 而不是 auto 来声明变量的类型
- 成员函数中的decltype(auto)忽略无效的正文,declttype(expr)失败
- 原型与decltype和auto不匹配
- 在一个类内部,为什么'auto b() -> decltype(a()) {}'有效,而'decltype(a()) b() {}'不起作用?
- decltype vs auto
- 新初始值设定项中的decltype(auto)
- 在C++引物中对函数指针类型使用auto或decltype