2011-05-09 233 views
6

是否有这些有什么区别:c + +返回类型问题

struct Class* CreateClass();

和:

Class* CreateClass();

这只是一个工厂函数声明。你可以看到一个结构在开始,一个没有。我已经尝试了这两种方式,似乎没有什么区别。

应该使用哪一个?

回答

6

它是选自C;在C++中没有区别。

*好的,我撒谎,对不起。 :P如果你真的想要,你可以混淆自己,如果你使用一个typedef具有相同的名字但是不同的基础类型,但是通常它们没有区别,那么它们就会有所不同。假设Class已经被声明,但是...如果Class未申报,第二个将不会编译。

这就是说,惯例是要做到:

typedef struct Class { ... } Class; 

,使其在编译C和C++一样。

+0

我想我明白了。所以在C中,如果我想使用'Class * CreateClass();'那么我必须使用'typedef struct Class {...} Class;'。但是如果我想使用'Class * CreateClass()',那么在C++中,那么我只需要使用'struct Class {...};'。然后,如果我希望它“向后兼容”,即使使用C++,我也应该使用C版本。 – Ryan 2011-05-09 01:52:30

+0

@Ryan:的确如此。 – Mehrdad 2011-05-09 01:53:10

3

只要没有相同名称的功能Class就没有区别。您不应该使用与类相同的名称编写函数,而应遵循常用的C++风格,您应该只使用Class *

[编辑:相同的校正如迈赫达德,无功能或typedef的]

0

在C++中,没有区别。使用“struct”只是为了与C向后兼容,其中声明struct foo { ... };将声明名为“struct foo”的类型,并且如果使用typedef struct foo foo,则“foo”只是有效的类型名称。