`) 在函数标题中做什么? " />
函数标题中的箭头运算符 (->)
本文探讨了函数标题中使用的箭头运算符 (->),它是一个C 11 语法的基本方面。
理解箭头运算符
C 11 为函数声明引入了两种等效语法:
箭头运算符第二种语法中的 (->;) 具有重要作用,它可以使用 decltype 关键字从函数的参数中推导出函数的返回类型。
为什么使用自动推导的返回值类型?
在某些情况下,根据参数类型动态派生返回类型是有利的,例如,考虑以下计算总和的函数。两个值:
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
在这种情况下,decltype 参数通知编译器返回类型应与表达式 a b 的类型相同。但是,此声明会引发错误,因为编译器在 decltype 参数中缺少有关 a 和 b 的信息。
克服错误
要解决此问题,您可以使用 std::declval 和模板参数手动指定类型:
template <typename T1, typename T2> decltype(std::declval<T1>() + std::declval<T2>()) compose(T1 a, T2 b);
或使用带箭头的备用声明语法运算符 (->):
template <typename T1, typename T2> auto compose(T1 a, T2 b) -> decltype(a + b);
后一个选项更加简洁并简化了范围规则。
C 14 增强
中C 14,只要函数在使用前完全定义并且所有 return 语句推导出相同的结果,以下语法也是允许的类型:
auto identifier (argument-declarations...)
但是,箭头运算符 (->) 对于声明公共函数(在标头中)同时将其函数体隐藏在源文件中仍然很有用。
以上是箭头运算符 (`->`) 在函数标题中起什么作用?的详细内容。更多信息请关注PHP中文网其他相关文章!