几乎总是 decltype(auto)

Almost Always decltype(auto)?

本文关键字:auto decltype      更新时间:2023-10-16

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); }