该标准似乎暗示,如果不使用 odr(第 3.2/3 节),则对变量的定义数量没有限制:
每个程序都应包含该程序中 odr 使用的每个非内联函数或变量的准确定义;无需诊断。
它确实说任何变量都不能在翻译单元中多次定义(第 3.2/1 节):
任何翻译单元都不得包含一个以上的任何变量、函数、类类型、枚举类型或模板的定义。
但是我在整个程序中找不到对非 ODR 使用的变量的限制。那么为什么我不能编译如下内容:
// other.cpp
int x;
// main.cpp
int x;
int main() {}
使用 g++ 4.6.3 编译和链接这些文件,我得到一个链接器错误multiple definition of 'x'
。老实说,我期待这一点,但由于x
没有在任何地方使用 odr(据我所知),我看不出标准如何限制这一点。还是未定义的行为?