在 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>{}); }
除了这些主要应用之外,decltype(auto) 还有各种其他用途,如 C 草案标准 (N3936) 中所述:
变量初始化:
decltype(auto) x3d = i; // decltype(x3d) is int
指针声明:
decltype(auto)*x7d = &i; // decltype(x7d) is int*
以上是'decltype(auto)”在 C 中的应用是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!