Tim*_*Tim 38 c c++ declaration function signature
在C或C++中,函数声明和函数签名有什么区别?
我知道一些函数声明,但函数签名对我来说是全新的.有功能签名概念有什么意义?实际使用的两个概念是什么?
谢谢!
Mic*_*urr 42
函数声明是函数的原型(或者如果编译器在那时没有看到原型,它可以来自函数定义) - 它包括返回类型,函数名称和参数类型(任选地在C)中.
函数签名是函数声明中用于执行重载解析的部分.由于多个函数可能具有相同的名称(即,它们被重载),因此编译器需要一种方法来确定函数调用应该解析的具有特定名称的几个可能函数中的哪一个.签名是编译器在重载决策中考虑的.具体而言,标准将"签名"定义为:
有关参与重载决策的函数的信息:参数的类型,如果函数是类成员,则函数本身的cv限定符(如果有)以及声明成员函数的类.
请注意,返回类型不是函数签名的一部分.正如标准在脚注中所说,"功能签名不包括返回类型,因为它不参与重载决策".
该标准定义了两个术语:声明和定义.定义是暂定声明.但是,C99和C++ 03标准的定义略有不同.
来自C++ 0x草案:
附录C.
8.3.5更改:在C++中,使用空参数列表声明的函数不带参数.在C中,空参数列表表示函数参数的数量和类型未知"
定义
1.3.11签名
函数的名称和参数类型列表(8.3.5),以及它所属的类,概念,概念图或命名空间.如果函数或函数模板是类成员,则其签名还包括函数或函数模板本身上的cv限定符(如果有)和ref-qualifier(如果有).受约束成员(9.2)的签名包括其模板要求.函数模板的签名还包括其返回类型,模板参数列表及其模板要求(如果有).函数模板特化的签名包括作为特化的模板的签名及其模板参数(无论是明确指定还是推导).[注意:签名用作名称修改和链接的基础.-end note]
函数签名不包括函数的返回类型或链接类型。
好吧,维基百科不同意我关于包含返回类型的观点。但是我知道编译器在确定函数调用是否与签名匹配时不使用返回类型。之前的 StackOverflow 问题似乎同意:返回类型是函数签名的一部分吗?
归档时间: |
|
查看次数: |
38536 次 |
最近记录: |