¿Qué es la statement directa en c ++?

Esta respuesta dice:

… Finalmente,

typedef struct { ... } Foo; 

declara una estructura anónima y crea un typedef para ella. Por lo tanto, con este constructo, no tiene un nombre en el espacio de nombre de etiqueta, solo un nombre en el espacio de nombres typedef. Esto significa que tampoco puede ser declarado adelante. Si desea hacer una statement directa, debe darle un nombre en el espacio de nombre de la etiqueta.

¿Qué es una statement directa?

Chad ha dado una definición de diccionario bastante buena. Las declaraciones a futuro se usan a menudo en C ++ para tratar con relaciones circulares. Por ejemplo:

 class B; // Forward declaration class A { B* b; }; class B { A* a; }; 

“En la progtwigción informática, una statement directa es una statement de un identificador (que denota una entidad como un tipo, una variable o una función) para la cual el progtwigdor aún no ha dado una definición completa”.

– Wikipedia

Según mi leal saber y entender, en C ++ el término “statement directa” es un nombre inapropiado. Es simplemente una statement con un nombre elegante.

Una statement fowrard declara el identificador (lo pone en un espacio de nombre) antes de la definición real. Se necesita reenviar la statement de estructuras si necesita usar un puntero a la estructura antes de que se defina la estructura.

En el contexto de la respuesta que vinculó, si tiene typedef struct {...} Foo; , no puede usar un puntero a Foo dentro de la estructura o antes del final de la statement typedef.

Por otro lado, puede typedef struct tagFoo Foo; y luego struct tagFoo {...};

La statement directa es necesaria cuando un miembro de la clase utiliza una referencia de otra clase en ella. P.ej:

 class AB; // forward declaration class A { public: int j; void sum(AB a) { return ai + j; } }; class AB{ public: int i; };