首页 >后端开发 >C++ >`decltype(auto)` 如何改进 C 中的返回类型推导和模板使用?

`decltype(auto)` 如何改进 C 中的返回类型推导和模板使用?

Patricia Arquette
Patricia Arquette原创
2024-12-11 18:48:10698浏览

How Does `decltype(auto)` Improve Return Type Deduction and Template Usage in C  ?

“decltype(auto)”语言功能的使用

在 C 14 中引入,“decltype(auto)”习惯用法允许 ' auto' 声明在指定表达式上利用 'decltype' 规则,主要用于函数中的返回类型推导。然而,它的实用性超出了这种情况。

通用代码中的返回类型转发

对于非通用代码,可以显式选择返回类型作为引用。然而,在通用代码中,无论返回类型是引用还是值,“decltype(auto)”都可以实现准确的返回类型转发。

template<class Fun, class... Args>
decltype(auto) Example(Fun fun, Args&&... args) 
{ 
    return fun(std::forward<Args>(args)...); 
}

延迟递归模板中的返回类型推导

定义递归模板时,'decltype(auto)'可以将返回类型推导推迟到模板之后

template<int i> 
struct Int {};

constexpr auto iter(Int<0>) -> Int<0>;

template<int i>
constexpr auto iter(Int<i>) -> decltype(auto) 
{ return iter(Int<i-1>{}); }

int main() { decltype(iter(Int<10>{})) a; }

其他应用

根据标准草案 N3936,'decltype(auto)' 可以出现在各种上下文中,包括函数声明符、类型说明符,以及变量初始化。这些上下文为返回类型推导、类型占位符指定和安全值分配等操作提供了实用程序。

int i;
int&& f();
auto x3a = i;              // decltype(x3a) is int
decltype(auto) x3d = i;    // decltype(x3d) is int
auto x4a = (i);            // decltype(x4a) is int
decltype(auto) x4d = (i);  // decltype(x4d) is int&amp;
auto x5a = f();            // decltype(x5a) is int
decltype(auto) x5d = f();  // decltype(x5d) is int&amp;&amp;

以上是`decltype(auto)` 如何改进 C 中的返回类型推导和模板使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn