Почему глобальный константный объект имеет уникальную копию в каждой единице перевода и как этого избежать?C++

Программы на C++. Форум разработчиков
Гость
Почему глобальный константный объект имеет уникальную копию в каждой единице перевода и как этого избежать?

Сообщение Гость »


Когда я объявил и инициализировал константный объект.

// ConstClass.h класс ConstClass { }; const ConstClass g_Const; И этот заголовок есть в двух файлах cpp.

// Unit1.cpp #include "ConstClass.h" #include "stdio.h" недействительный PrintInUnit1( ) { printf( "g_Const в Unit1 равен %d.\r\n", &g_Const ); } и

// Unit2.cpp #include "ConstClass.h" #include "stdio.h" недействительный PrintInUnit2( ) { printf( "g_Const в Unit2 равна %d.\r\n", &g_Const ); } Когда я создавал решение, не было ошибок ссылки, что вы получите, если g_Const — неконстантный фундаментальный тип!

А PrintInUnit1() и PrintInUnit2() показывают, что в двух модулях компиляции есть два независимых объекта "g_Const" с разными адресами. Почему?

==============

Я знаю, как это исправить. (используйте ключевое слово extern для объявления и определите его в одном файле cpp.)

Интересно, почему в этом примере я не получил ошибку redfined link?

Вернуться в «C++»