首页 > 后端开发 > C++ > 箭头运算符 (`->`) 在函数标题中起什么作用?

箭头运算符 (`->`) 在函数标题中起什么作用?

Barbara Streisand
发布: 2024-11-18 07:08:02
原创
1050 人浏览过

What Does the Arrow Operator (`->`) 在函数标题中做什么? 
`) 在函数标题中做什么? " />

函数标题中的箭头运算符 (->)

本文探讨了函数标题中使用的箭头运算符 (->),它是一个C 11 语法的基本方面。

理解箭头运算符

C 11 为函数声明引入了两种等效语法:

  1. 返回类型标识符(参数声明...)
  2. 自动标识符 (参数声明...) -> return_type

箭头运算符第二种语法中的 (->;) 具有重要作用,它可以使用 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中文网其他相关文章!

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