关于using const功能参数 https://stackoverflow.com/questions/117293/use-of-const-for-function-parameters我听说在某些 OS X 系统上参数的常量性被破坏到了函数签名中。例如,如果接口头文件中有以下声明:
int f(int argument);
但如果只实现这个功能:
int f(int const argument);
那么这可能会导致 OS X 上的链接失败(但不会在 Linux 上),因为 OS X 破坏 C++ 函数签名的方式包括参数的常量性。
哪一个是正确的损坏行为? C++ 标准对此有发言权吗?
出于名称修改的目的,应忽略顶级 const 和 volatile 限定符。这可以从标准中的两件事来确定。首先,函数的签名用于名称修改。
在 C++14 标准中,第 1.3.17 节定义了一个签名:
name, 参数类型列表(8.3.5),以及封闭的命名空间(如果有)[注意:签名用作名称修改和链接的基础。——尾注]
为了获得参数类型列表的定义,我们参考第8.3.5/5节:
函数的类型是使用以下规则确定的。每个参数的类型
(包括函数参数包)由其自身的 decl-specifier-seq 和 declarator 确定。后
确定每个参数的类型,任何类型为“T 的数组”或“返回 T 的函数”的参数都是
分别调整为“指向 T 的指针”或“指向返回 T 的函数的指针”。产生清单后
参数类型,形成参数类型时,任何修改参数类型的顶级 cv 限定符都会被删除
功能类型。转换后的参数类型的结果列表以及省略号的存在或不存在
或者函数参数包是函数的参数类型列表。 [注:此转换不
影响参数的类型。例如,整数()(const int p, decltype(p)) 和 int()(整数,
常量整型) 是相同的类型。 ——尾注]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)