【问题标题】:Almost Always decltype(auto)?几乎总是 decltype(auto)?
【发布时间】:2014-12-26 03:07:20
【问题描述】:
decltype(auto) 可以推导出一个值和一个引用。 auto 从不推导出引用。在我看来,通用代码和优化decltype(auto) 应该始终是首选。是这样吗?例如,考虑返回一个对象,该对象可能是可复制的,也可能是不可复制的。 auto& 是避免复制它所必需的,但这会强制它始终作为参考。在这种情况下,decltype(auto) 是正确的选项。 decltype(auto) 除了打字多之外还有什么缺点?
【问题讨论】:
-
如果下面的答案回答了您的问题,堆栈溢出的工作方式,您可以通过单击旁边的复选标记“接受”该答案。更多here。如果没有,也许可以对要求澄清的问题发表评论。
标签:
c++
auto
c++14
decltype
【解决方案1】:
来自decltype(auto) 上的 isocpp C++14 常见问题解答:
注意: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); }