decltype(auto)
可以演绎一个 值 和a 参考。 auto
永远不会推断出一个 参考。这对我来说是通用代码和优化 decltype(auto)
应该始终是首选。是这样的吗?考虑例如返回可能或可能不可复制的对象。 auto&
需要避免复制它,但这会强制它始终作为参考。 decltype(auto)
在这种情况下是正确的选项。有什么缺点 decltype(auto)
除了打字更多?
decltype(auto)
可以演绎一个 值 和a 参考。 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); }