2011-05-09 8 views
6

¿Hay alguna diferencia entre estos:C++ volver tipo de pregunta

struct Class* CreateClass();

y:

Class* CreateClass();

Es sólo una declaración de la función de fábrica. Puedes ver que uno tiene struct al principio y otro no. Lo he intentado de ambas formas y no parece marcar la diferencia.

¿Qué debería estar usando?

Respuesta

6

Es de C; no hay diferencia * en C++.

* Bien, mentí, lo siento. : P Puedes confundirte si realmente quieres y hacer que sean diferentes si usas un typedef con el mismo nombre pero un tipo subyacente diferente, pero normalmente no son diferentes. Eso está asumiendo que Class ya está declarado, aunque ... si Class no está declarado, el segundo ni siquiera compilará.

Dicho esto, la convención es hacer:

typedef struct Class { ... } Class; 

para que compila la misma forma en C y C++.

+0

Creo que entiendo. Entonces en C si quiero usar 'Class * CreateClass();' entonces tengo que usar 'typedef struct Class {...} Class;'. Pero luego en C++ si quiero usar 'Class * CreateClass();' entonces solo tengo que usar 'struct Class {...};'. Y luego, si quiero que sea "compatible con versiones anteriores", debería usar la versión C incluso cuando utilizo C++. – Ryan

+0

@Ryan: Exactamente. – Mehrdad

3

No hace la diferencia siempre que no haya ninguna función en el alcance con el mismo nombre Class. No debe escribir una función con el mismo nombre que una clase, y para seguir el estilo común de C++ debe usar solo Class *.

[Editar: misma corrección como Mehrdad, ninguna función o typedef]

0

En C++, no hay diferencia. El uso de "struct" existe simplemente por compatibilidad con versiones anteriores con C, en el que declarar struct foo { ... }; declararía un tipo denominado "struct foo", y "foo" solo sería un nombre de tipo válido si utilizara typedef struct foo foo.