关于 function parameters,我听说在某些OS系统中,参数的一致性被破坏成函数签名。例如,如果接口头文件中有以下声明:
int f(int argument);但是,如果一个人只执行这个功能:
int f(int const argument);然后,这可能会导致OS (但不是Linux)上的链接失败,因为OS破坏C++函数签名的方法包括参数的一致性。
哪个是正确的残废行为?C++标准对此有发言权吗?
发布于 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)是相同的类型。-尾注
https://stackoverflow.com/questions/36532687
复制相似问题