Множественное определение глобальной переменной не допускается на C или С++ из-за правила One Definition. Однако в С++ глобальная переменная const может быть определена в нескольких единицах компиляции без ошибок. Это не то же самое, что в C.
Почему С++ разрешает это, пока C не работает? Почему использование и поведение глобального константа отличаются от неконстантного глобального таким образом в С++ по сравнению с C? Что происходит под обложками с С++ и C относительно const?
Например, это разрешено в С++, но неправильно в C:
// Foo.cpp
const int Foo = 99;
// Main.cpp
const int Foo = 99;
int main()
{
cout << Foo << endl;
return 0;
}
И это хорошо с C, но неправильно с С++:
// Foo.cpp
const int Foo = 99;
// Main.cpp
extern const int Foo;
int main()
{
cout << Foo << endl;
return 0;
}