在函数签名中指定结构

Specifying struct in function signature

本文关键字:结构 函数      更新时间:2023-10-16

假设我有

struct mystruct
{
};

void foo(struct mystruct x){}

void foo(mystruct x){}

?

在C语言中后者是无效的。

但是在c++中它们几乎是一样的:如果你还没有声明你的结构体,第一个是有效的,它会把它当作一个参数的前向声明。

在您编写的代码中没有。我所知道的使用带有和不带有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

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

无差异。后者是正确的c++语法;前者被允许作为恢复C程序员的遗留变体。

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

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