由于单一定义规则,在 C 或 C++ 中不允许对全局变量进行多重定义。但是,在 C++ 中,一个 const 全局变量可以在多个编译单元中定义而不会出错。这与 C 中的不同。
为什么 C++ 允许这样做,而 C 不允许?与 C 相比,为什么 C++ 中 const 全局变量的用法和行为与非 const 全局变量有这种不同?关于 const,C++ 和 C 的幕后发生了什么?
例如,这在 C++ 中是允许的,但在 C 中是错误的:
// Foo.cpp
const int Foo = 99;
// Main.cpp
const int Foo = 99;
int main()
{
cout << Foo << endl;
return 0;
}
这对 C 来说很好,但对 C++ 来说是错误的:
// Foo.cpp
const int Foo = 99;
// Main.cpp
extern const int Foo;
int main()
{
cout << Foo << endl;
return 0;
}