Cita de: amchacon en 12 Febrero 2014, 02:23 AM
No me queda muy claro que sea "util" en la práctica, lo digo porque el compilador se quejara si intentas adceder a un miembro de ella.
¿Para que quieres una clase si no puedes hacer nada con ella? A no ser que estes haciendo un contenedor... Pero para eso ya están los STL de C++.
No me queda muy claro...
El proceso de compilación se realiza archivo a archivo. En cada iteración, se explotan todos y cada uno de los includes que aparezcan en los archivos y eso conlleva una carga adicional.
Un ejemplo (presupongo que los includes están fuera de los ifdef para simplificar el ejemplo):
a.h:
Código (cpp) [Seleccionar]
#include <string>
b.h:
Código (cpp) [Seleccionar]
#include <string>
#include "a.h"
c.h:
Código (cpp) [Seleccionar]
#include<string>
include "a.h"
#incldue "b.h"
c.cpp
Código (cpp) [Seleccionar]
#include "c.h"
En este caso, a la hora de compilar, c.cpp, se cargará lo siguiente:
* #include <string> : se carga 3 veces
* #include "a.h": se carga 2 veces
* #include "b.h": se carga 1 vez
* #include "c.h": se carga 1 vez.
Lo ideal sería que cada uno de estos archivo se cargase una sola vez. Si bien las protecciones con #ifdef o con #pragma once evitan que la declaración de una clase o método aparezca más de una vez el compilador tiene antes leer y procesar el archivo de cabecera con la consiguiente demora en el proceso de compilación.
Esto aplicado a aplicaciones reales que pueden tener de 10 a 20 includes por archivo de cabecera pues te puedes imaginar que el trabajo en vano que hace el compilador se incrementa de forma sustancial.
El código final va a ser igualmente válido... solo que llevará más tiempo conseguir el mismo resultado.
En aplicaciones pequeñas no se notará la diferencia... en casos extremos como es mi caso, después de una revisión a fondo en este tema conseguimos reducir la compilación en más de 20 minutos... y el ahorro en memoria también se notó bastante.