首页 > 后端开发 > C++ > 'decltype(auto)”在 C 中的实际应用是什么?

'decltype(auto)”在 C 中的实际应用是什么?

Barbara Streisand
发布: 2024-12-10 06:03:16
原创
553 人浏览过

What are the practical applications of `decltype(auto)` in C  ?

decltype(auto) 有哪些用途?

C 14 中的 decltype(auto) 习惯用法允许进行推导来自给定表达式的变量类型。虽然其主要用途是使自动声明能够遵守 decltype 规则,但此功能还有其他几个有价值的应用程序。

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

在泛型代码中,在不事先知道返回值是引用还是值的情况下完美转发返回类型至关重要。 decltype(auto) 提供此功能:

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

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

定义递归模板时,实例化期间可能会发生无限递归如果返回类型声明为 decltype(...) 而不是 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; }
登录后复制

其他用途

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&
auto x5a = f();                // decltype(x5a) is int
decltype(auto) x5d = f();      // decltype(x5d) is int&&
auto x6a = { 1, 2 };           // decltype(x6a) is std::initializer_list<int>
decltype(auto) x6d = { 1, 2 }; // error, { 1, 2 } is not an expression
auto *x7a = &i;                // decltype(x7a) is int*
decltype(auto)*x7d = &i;       // error, declared type is not plain decltype(auto)
登录后复制

以上是'decltype(auto)”在 C 中的实际应用是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板