【问题标题】:C++ return type questionC++ 返回类型问题
【发布时间】:2011-05-09 01:18:06
【问题描述】:

这些有什么区别:

struct Class* CreateClass();

和:

Class* CreateClass();

这只是一个工厂函数声明。你可以看到一个在开始时有 struct 而一个没有。两种方法我都试过了,好像没什么区别。

我应该使用哪个?

【问题讨论】:

    标签: c++ return-type


    【解决方案1】:

    它来自C;在 C++ 中没有区别*。

    *好吧,我撒谎了,对不起。 :P 如果你真的想要,你可以混淆自己,如果你使用 typedef 具有相同的名称但不同的底层类型,则它们会有所不同,但通常它们并没有什么不同。这是假设 Class 已经声明了,但是...如果 Class 未声明,第二个甚至不会编译。

    也就是说,约定是这样做的:

    typedef struct Class { ... } Class;
    

    这样它在 C 和 C++ 中的编译方式相同。

    【讨论】:

    • 我想我明白了。所以在 C 中,如果我想使用Class* CreateClass();,那么我必须使用typedef struct Class { ... } Class;。但是在 C++ 中,如果我想使用Class* CreateClass();,那么我只需要使用struct Class { ... };。然后,如果我希望它“向后兼容”,即使使用 C++,我也应该使用 C 版本。
    【解决方案2】:

    只要作用域中没有同名的函数Class,它就没有什么区别。您不应该编写与类同名的函数,并且要遵循常见的 C++ 风格,您应该只使用 Class *

    [编辑:与 Mehrdad 相同的更正,没有函数或 typedef]

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-22
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多