请考虑以下C ++程序:
int _Z5func2v;
void func2() {
}
当您尝试编译它时,它将失败:
$ g++ test.cpp -c
/tmp/cc1RDxpU.s: Assembler messages:
/tmp/cc1RDxpU.s:13: Error: symbol `_Z5func2v' is already defined
/tmp/cc1RDxpU.s: Error: .size expression for _Z5func2v does not evaluate to a constant
这是因为程序定义了一个全局变量,该全局变量具有与名称处理之后的函数相同的名称。
我可以想到许多解决方法,最简单的方法是在整齐的名称开头使用两个下划线(两个下划线保留给私有实现使用)。
问题是:为什么选择一种方案使之成为可能?
以单个下划线后跟一个大写字母开头的名称的保留方式与保留两个下划线的名称相同。
例如,从2003 C ++标准的17.4.3.1.2节开始,“任何包含双下划线(__)或以下划线后跟大写字母(2.11)开头的名称都保留给实现以供任何使用。”
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句