首页 > 后端开发 > C++ > 什么时候应该在 C 函数头中使用箭头运算符?

什么时候应该在 C 函数头中使用箭头运算符?

DDD
发布: 2024-11-13 05:43:02
原创
708 人浏览过

When Should You Use the Arrow Operator in C   Function Headers?

函数头中的箭头运算符

在 C 11 及更高版本中,函数声明存在两种语法:

传统语法:

return-type identifier(argument-declarations...)
登录后复制

现代语法:

auto identifier(argument-declarations...) -> return_type
登录后复制

两种语法是等效的。然而,现代语法提供了一种从参数类型推断返回类型的便捷方法。这在使用 decltype 说明符时特别有用,它使您能够描述表达式的类型。

在以前的 C 版本中,您可以编写:

template <typename T1, typename T2>
decltype(a + b) compose(T1 a, T2 b);
登录后复制

但是,编译器会在尝试确定返回类型时不知道 a 和 b 是什么。

要解决此问题,您可以使用 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 允许使用以下语法:

auto identifier(argument-declarations...)
登录后复制

只要函数在使用前完全定义并且所有 return 语句推导出相同的类型。

使用案例:

箭头运算符 (->) 语法对于在头文件中声明的公共函数仍然有用,您希望在源文件中隐藏实现。这对于模板函数或通过模板元编程派生的专用具体类型尤其相关。

以上是什么时候应该在 C 函数头中使用箭头运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!

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