C ++ тип возвращаемого вопроса - PullRequest
6 голосов
/ 09 мая 2011

Есть ли разница между ними:

struct Class* CreateClass();

и

Class* CreateClass();

Это просто объявление фабричной функции. Вы можете видеть, что у кого-то есть структура в начале, а у кого-то нет. Я пробовал оба способа, и это, кажется, не имеет значения.

Что я должен использовать?

Ответы [ 3 ]

6 голосов
/ 09 мая 2011

Это из C;нет никакой разницы * в C ++.

* Хорошо, я соврал, извините.: P Вы можете запутать себя, если действительно хотите, и заставить их отличаться, если вы используете typedef с тем же именем, но другим базовым типом, но обычно они не отличаются.Предполагается, что Class уже объявлено, хотя ... если Class не объявлено, второе даже не скомпилируется.

Тем не менее, соглашение заключается в следующем:

typedef struct Class { ... } Class;

, чтобы он компилировался одинаково в C и C ++.

3 голосов
/ 09 мая 2011

Это не имеет значения, если в области действия нет функции с тем же именем Class.Вы не должны писать функцию с тем же именем, что и у класса, и чтобы следовать общему стилю C ++, вы должны использовать просто Class *.

[Edit: то же исправление, что и у Mehrdad, без функции или typedef]

0 голосов
/ 09 мая 2011

В C ++ нет разницы.Использование «struct» существует только для обратной совместимости с C, в котором объявление struct foo { ... }; объявляет тип с именем «struct foo», а «foo» будет только допустимым именем типа, если вы затемб typedef struct foo foo.

...