是否有這些有什麼區別:c + +返回類型問題
struct Class* CreateClass();
和:
Class* CreateClass();
這只是一個工廠函數聲明。你可以看到一個結構在開始,一個沒有。我已經嘗試了這兩種方式,似乎沒有什麼區別。
應該使用哪一個?
是否有這些有什麼區別:c + +返回類型問題
struct Class* CreateClass();
和:
Class* CreateClass();
這只是一個工廠函數聲明。你可以看到一個結構在開始,一個沒有。我已經嘗試了這兩種方式,似乎沒有什麼區別。
應該使用哪一個?
它是選自C;在C++中沒有區別。
*好的,我撒謊,對不起。 :P如果你真的想要,你可以混淆自己,如果你使用一個typedef
具有相同的名字但是不同的基礎類型,但是通常它們沒有區別,那麼它們就會有所不同。假設Class
已經被聲明,但是...如果Class
未申報,第二個將不會編譯。
這就是說,慣例是要做到:
typedef struct Class { ... } Class;
,使其在編譯C和C++一樣。
只要沒有相同名稱的功能Class
就沒有區別。您不應該使用與類相同的名稱編寫函數,而應遵循常用的C++風格,您應該只使用Class *
。
[編輯:相同的校正如邁赫達德,無功能或typedef的]
在C++中,沒有區別。使用「struct
」只是爲了與C向後兼容,其中聲明struct foo { ... };
將聲明名爲「struct foo
」的類型,並且如果使用typedef struct foo foo
,則「foo
」只是有效的類型名稱。
我想我明白了。所以在C中,如果我想使用'Class * CreateClass();'那麼我必須使用'typedef struct Class {...} Class;'。但是如果我想使用'Class * CreateClass()',那麼在C++中,那麼我只需要使用'struct Class {...};'。然後,如果我希望它「向後兼容」,即使使用C++,我也應該使用C版本。 – Ryan 2011-05-09 01:52:30
@Ryan:的確如此。 – Mehrdad 2011-05-09 01:53:10