返回类型是否包含在函数签名中以及是否允许仅修改返回类型的重载?
在 C 中,有一个区别函数声明和函数实体之间。声明可以建立功能实体或模板实体。对于非模板函数声明,签名包含参数类型、类成员信息(如果适用)和限定符。然而,对于函数模板特化,签名还包含返回类型。
函数特化的函数签名
标准 C 规定,对于函数模板特化,签名涉及返回类型,如第 14.5.5.1 节中突出显示的那样。这包括模板的签名和提供的模板参数。这符合返回类型影响函数类型的理解。
使用区分返回类型的重载
根据标准,函数声明不同的返回类型在重载方面被认为是不同的(第 13.1 节)。然而,“仅因返回类型不同”的定义在语言中仍未指定。
编译器行为
目前,主要编译器拒绝具有相同签名但不同的函数声明返回类型(例如,“int f();”、“double f();”)。然而,这种行为不一定是标准强制要求的。
C 0x 提案草案
最近的 C 0x 草案规范在第 1.3.11 节,明确包含函数实体和模板特化的返回类型。这与返回类型构成函数类型不可分割的一部分的断言相一致。
因此,总而言之:
以上是C 函数重载是否只允许返回类型存在差异?的详细内容。更多信息请关注PHP中文网其他相关文章!