首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否允许函数参数不匹配?

是否允许函数参数不匹配?
EN

Stack Overflow用户
提问于 2016-04-10 16:55:56
回答 1查看 228关注 0票数 3

关于 function parameters,我听说在某些OS系统中,参数的一致性被破坏成函数签名。例如,如果接口头文件中有以下声明:

代码语言:javascript
复制
int f(int argument);

但是,如果一个人只执行这个功能:

代码语言:javascript
复制
int f(int const argument);

然后,这可能会导致OS (但不是Linux)上的链接失败,因为OS破坏C++函数签名的方法包括参数的一致性。

哪个是正确的残废行为?C++标准对此有发言权吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-10 17:20:55

对于名称损坏的目的,应该忽略顶级const和易失性限定符。这可以通过标准中的两件事来确定。首先,函数的签名用于名称损坏。

在C++14标准中,第1.3.17节定义了签名:

名称、参数类型列表(8.3.5)和封闭的名称空间(如果有的话)注释:签名被用作名称损坏和链接的基础。-尾注

要获得参数类型列表的定义,请参阅8.3.5/5节:

函数的类型使用下列规则确定。每个参数的类型(包括函数参数包)由它自己的decl-说明符-seq和声明器确定。在确定每个参数的类型后,将“T数组”或“函数返回T”类型的任何参数分别调整为“指向T的指针”或“指向函数返回T的指针”。生成参数类型列表后,在形成函数类型时,删除任何修改参数类型的顶级cv限定符。转换后的参数类型列表以及省略号或函数参数包的存在与否是函数的parameter-type-list.注意:此转换不影响参数的类型。例如,int()(const int p,decltype(p))和int()(int,const int)是相同的类型。-尾注

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36532687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档