这些之间有什么区别:
struct Class* CreateClass();
和
Class* CreateClass();
这只是一个工厂功能声明。你可以看到一个开头有一个结构而一个没有结构。我已经尝试了两种方式,似乎没有什么区别。
我应该使用哪个?
答案 0 :(得分:6)
来自C;在C ++中没有区别*。
*好的,我撒了谎,抱歉。 :P如果你真的想要,你可以迷惑自己,如果你使用同名但基础类型不同的typedef
,你可能会有所不同,但通常他们没有什么不同。假设已经宣布Class
,但是......如果Class
未声明,则第二个甚至不会编译。
那就是说,惯例是:
typedef struct Class { ... } Class;
因此它在C和C ++中以相同的方式编译。
答案 1 :(得分:3)
只要具有相同名称Class
的范围内没有功能,它就没有区别。您不应该编写与类同名的函数,并且要遵循常见的C ++样式,您应该只使用Class *
。
[编辑:与Mehrdad相同的修正,没有函数或typedef ]
答案 2 :(得分:0)
在C ++中,没有区别。使用“struct
”只是为了向后兼容C,其中声明struct foo { ... };
会声明一个名为“struct foo
”的类型,而“foo
”只会如果您之后使用typedef struct foo foo
,则为有效的类型名称。