首页 >后端开发 >C++ >C 函数签名是否包含返回类型?

C 函数签名是否包含返回类型?

Barbara Streisand
Barbara Streisand原创
2024-12-04 05:02:10736浏览

Does C   Function Signature Include the Return Type?

返回类型影响函数签名吗?

在 C 中,没有函数模板声明的函数在其签名中排除其返回类型。禁止仅根据不同的返回类型重载函数。

详细说明

函数及其声明和签名之间的关系很复杂。

声明和实体

函数声明可以声明功能实体或模板实体。普通函数和函数模板的显式特化属于第一类。主函数模板或带有未指定参数的显式特化属于后一类。

签名定义

根据 C 标准 (1.3.10),函数签名包含以下:

  • 参数类型
  • 对于类函数上的成员、cv 限定符以及包含类

但是,此定义缺少返回类型的提及。

函数模板和返回类型

相反,函数模板特化的签名包括函数签名和返回类型(14.5.5.1).

那么,签名到底是什么?

对于非模板函数,签名不包括返回类型。但是,对于模板特化,返回类型被合并。

重载的含义

标准禁止仅根据不同的返回类型进行重载。不过,对于什么构成这种区别仍然不明确。

编译器行为

由于类型不兼容,主要编译器拒绝以下代码:

int f();
double f(); // invalid

然而,他们接受:

template<typename T> int f();
template<typename T> double f(); // invalid?

结论

返回类型虽然不是非模板函数签名的一部分,但对于确定函数类型兼容性至关重要。理解这些细微差别对于有效的 C 编程至关重要。

以上是C 函数签名是否包含返回类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn