Множественное определение глобальной переменной запрещено в C или C ++ из-за правила одного определения. Однако в C ++ глобальная переменная const может быть определена в нескольких единицах компиляции без ошибок. Это не то же самое, что в C.
Почему C ++ допускает это, а C - нет? Почему использование и поведение константного глобального отличается от неконстантного глобального таким образом в C ++ по сравнению с C? Что происходит под прикрытием C ++ и C по отношению к const?
Например, это разрешено в 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;
}