1 つの定義規則により、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;
}