Почему глобальный константный объект имеет уникальную копию в каждой единице перевода и как этого избежать? ⇐ 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?
Когда я объявил и инициализировал константный объект.
// 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?
Мобильная версия