C 14 中 decltype(auto) 的引入带来了一项变革性的功能,扩展了类型推导的可能性。除了允许自动声明符合 decltype 规则的主要目的之外,decltype(auto) 还提供了无数其他有价值的应用程序。
在通用代码中,完美转发返回类型至关重要。与可以手动指定返回类型以获得引用类型的非泛型代码不同,decltype(auto) 提供了转发返回类型的灵活性,无论其引用类型如何,而无需任何先验知识。
template
decltype(auto) 示例(Fun fun, Args&&... args)
{
return fun(std::forward<Args>(args)...);
}
在递归模板中,在递归过程中可能会发生无限递归如果返回类型是基于先前的迭代指定的,则模板实例化。通过使用 decltype(auto),返回类型推导被推迟到模板实例化完成,确保正确的类型解析。
template
struct Int {};
constexpr auto iter(Int) ->; Int;
模板
constexpr auto iter(Int) ->; decltype(auto)
{ return iter(Int
int main() { decltype(iter(Int{})) a; }
decltype(auto) 的多功能性也扩展到其他上下文,如 C 草案标准 (N3936) 中所述:
以上是`decltype(auto)` 如何扩展 C 类型推导功能?的详细内容。更多信息请关注PHP中文网其他相关文章!