在函数签名中指定struct

时间:2011-09-08 13:34:46

标签: c++ struct function-signature

说我有

struct mystruct
{
};

之间是否存在差异:

void foo(struct mystruct x){}

void foo(mystruct x){}

3 个答案:

答案 0 :(得分:11)

在C中,后者无效。

然而在C ++中它们几乎是相同的:如果你还没有声明你的结构,第一个将是有效的,它会把它作为参数的前向声明一个一个。

答案 1 :(得分: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

因此,不要定义与类同名的函数。

答案 2 :(得分:3)

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

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

[编辑:显然 是一个小差异,请参阅Mark B的优秀答案。]