Я хочу знать, в C++, когда происходит инициализация объектов?
Это время компиляции или время ссылки?
Для экс:инициализация объектов в C++
//file1.cpp
extern int i;
int j=5;
//file2.cpp (link with file1.cpp)
extern j;
int i=10;
Теперь, что делает компилятор делать: по мне, он выделяет память для переменных.
Теперь я хочу знать:
ли это также значение инициализации в этом хранилище или это делается во время ссылки?
Что относительно членов «static const» (а не классов)? Действительно ли они существуют как «переменная»? Я думаю, что каждое их использование просто заменяется значением, а «статическая константная переменная» просто исчезает. Правильно? Для остальных, хороший обзор, +1. – Patrick
Хорошо .. Так в коде выше ... будет ли что-то случится? 1. при компиляции файла file1.cpp компилятор уходит из i, так как он не распределяет память для i. 2. компилятор выделяет хранилище для j, но не инициализирует его. 3. При компиляции file2.cpp компилятор уезжает j, так как это i.e не выделяет для него хранилище. 4. компилятор выделяет хранилище для i, но не инициализирует его. 5. При связывании file1.o и file2.o теперь пусть сначала инициализируется file2.o, так что теперь: Получает ли j начальное значение 0? или не инициализируется? –
@Patrick, хороший момент, я не знаю точно. Я думаю, вы правы, поскольку стоимость наличия переменной выше, чем встроенное значение для базовых типов. Однако не 100% уверены, что все компиляторы ведут себя так ... – jdehaan