2011-05-09 177 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」只是有效的類型名稱。