【发布时间】:2016-04-10 16:55:56
【问题描述】:
关于using const function parameters 我听说在某些 OS X 系统上,参数的常量性被破坏到函数签名中。例如,如果在接口头文件中有以下声明:
int f(int argument);
但如果只实现这个功能:
int f(int const argument);
那么这可能会导致 OS X(但不是 Linux)上的链接失败,因为 OS X 破坏 C++ 函数签名的方式包括参数的常量性。
正确的修饰行为是什么? C++ 标准对此有发言权吗?
【问题讨论】:
-
int f(int const argument);是相当多余的,但如果你坚持它是有意义的。 -
出于兴趣,您从哪里听到的?如果属实,这将是非常糟糕的。
-
正确的行为是忽略顶级
const,这意味着const适用于参数本身(而不是参数所指的东西)。例如,int *const和int *相同,但int const *和int *不同。很难相信 OS X 会有一个编译器会出错(这是 C++ 的一个非常基本的部分,早在 OS X 出现之前就已经广为人知了)。 -
@OliverCharlesworth 大约 2 年前,一些同事注意到一些代码由于这种不匹配而无法在 OS X 上链接,因此从那以后我一直试图避免这种情况。我不记得他们使用了什么工具链。
-
@jotik 这听起来不太可能。你能重现它吗?
标签: c++ macos abi name-mangling