Quiero saber, en C++, ¿cuándo tiene lugar la inicialización de los objetos?
¿Está en el tiempo de compilación o tiempo de enlace?
Por ejemplo:inicialización de objetos en C++
//file1.cpp
extern int i;
int j=5;
//file2.cpp (link with file1.cpp)
extern j;
int i=10;
Ahora, lo que hace compilador de hacer: en mi opinión, se asigna almacenamiento para las variables.
Ahora quiero saber:
¿también pone el valor de inicialización en ese almacenamiento o se hace en el tiempo del enlace?
¿Qué pasa con los miembros de "static const" (no las clases)? ¿Realmente existen como una 'variable'? Creo que cada uso de ellos simplemente se reemplaza por el valor y la "variable de constante estática" simplemente desaparece. ¿Derecha? Por lo demás, buena visión general, +1. – Patrick
Ok ... Así que en el código de arriba ... ¿Seguirán las cosas sucederá? 1. al compilar file1.cpp, el compilador deja i como está, es decir, no asigna almacenamiento para i. 2. el compilador asigna almacenamiento para j, pero no lo inicializa. 3. Al compilar file2.cpp, el compilador deja j como está i.e no asigna almacenamiento para ello. 4. el compilador asigna almacenamiento para i, pero no lo inicializa. 5. Mientras enlaza file1.o y file2.o, ahora permite que file2.o se inicialice primero, entonces ahora: ¿Tiene j el valor inicial de 0? o no se inicializa? –
@Patrick, buen punto, no estoy seguro. Supongo que tienes razón, ya que el costo de tener una variable es más alto que un valor en línea para los tipos básicos. Sin embargo, no está 100% seguro de que todos los compiladores se comporten de esa manera ... – jdehaan