Почему множественное определение глобальной переменной const разрешено в C ++, а не в C?

Множественное определение глобальной переменной запрещено в 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;
}
28
задан MSalters 31 May 2011 в 10:35
поделиться