5

说我有

struct mystruct
{
};

有没有区别:

void foo(struct mystruct x){}

void foo(mystruct x){}

?

4

3 回答 3

11

在 C 中,后者是无效的。

但是在 C++ 中它们几乎是相同的:如果您还没有声明您的结构,第一个将是有效的,它会将其视为参数的前向声明。

于 2011-09-08T13:38:03.103 回答
7

不在您编写的代码中。我所知道的使用带和不带定义的类名的唯一区别struct如下:

struct mystruct
{
};

void mystruct() {}

void foo(struct mystruct x){} // compiles
void foo(mystruct x){} // doesn't - for compatibility with C "mystruct" means the function

所以,不要定义与类同名的函数。

于 2011-09-08T13:41:18.997 回答
3

没有不同。后者是正确的 C++ 语法;前者可以作为恢复 C 程序员的遗留变体。

请注意,structandclass本质上是相同的,并且都定义了一个类,因此在 C++ 中对 C 风格的 POD 结构没有特殊处理。

[编辑:显然有一个小的区别,请参阅 Mark B 的优秀答案。]

于 2011-09-08T13:37:52.617 回答