返回类型影响函数签名吗?
在 C 中,没有函数模板声明的函数在其签名中排除其返回类型。禁止仅根据不同的返回类型重载函数。
详细说明
函数及其声明和签名之间的关系很复杂。
声明和实体
函数声明可以声明功能实体或模板实体。普通函数和函数模板的显式特化属于第一类。主函数模板或带有未指定参数的显式特化属于后一类。
签名定义
根据 C 标准 (1.3.10),函数签名包含以下:
但是,此定义缺少返回类型的提及。
函数模板和返回类型
相反,函数模板特化的签名包括函数签名和返回类型(14.5.5.1).
那么,签名到底是什么?
对于非模板函数,签名不包括返回类型。但是,对于模板特化,返回类型被合并。
重载的含义
标准禁止仅根据不同的返回类型进行重载。不过,对于什么构成这种区别仍然不明确。
编译器行为
由于类型不兼容,主要编译器拒绝以下代码:
int f(); double f(); // invalid
然而,他们接受:
template<typename T> int f(); template<typename T> double f(); // invalid?
结论
返回类型虽然不是非模板函数签名的一部分,但对于确定函数类型兼容性至关重要。理解这些细微差别对于有效的 C 编程至关重要。
以上是C 函数签名是否包含返回类型?的详细内容。更多信息请关注PHP中文网其他相关文章!