He estado buscando en el SDK de Miedo para mi proyecto de la universidad, pero han notado un cierto código de este modo:¿Por qué incluir un encabezado y reenviar declarar la clase contenida en el mismo archivo cpp?
foo.h
class Foo
{
public:
int iSomething;
};
Bar.cpp:
#include "Foo.h"
// Forward declarations
class Foo;
Es ¿Hay alguna razón particular para reenviar declarar Y incluir el encabezado apropiado en el mismo archivo cpp? ¿O es la declaración directa redundante porque se está incluyendo el encabezado?
EDIT:
Cada vez que he visto en el código, la instrucción de inclusión es siempre antes de la declaración hacia adelante.
¿Puedes elaborar? Originalmente escribí exactamente lo mismo, pero luego pensé un poco más sobre eso y pensé que si Bar forward-declara Foo, inmediatamente # incluye a Foo.h, debería a) siempre dar como resultado la declaración de Foo de todos modos, yb) nunca dependas de otro encabezado que ya haya declarado a Foo. ¿Puedes dar un ejemplo de por qué tener la declaración directa antes del #include realmente ayuda? – mgiuca
@mgiuca - reduce los tiempos de compilación. muchas veces el código solo usa punteros, y nunca requiere el tamaño real de la clase [y nunca crea instancias].En esas circunstancias, basta con una declaración hacia adelante, lo que le ahorra el tiempo de incluir otros archivos. –
@Foo Bah Sí, es una buena razón para usar una declaración directa * en lugar de * a #include. Pero eso no explica por qué tendrías ambos. Si tuviera ambas cosas, necesitaría procesar el archivo incluido, ya sea que se haya utilizado o no. – mgiuca