在函数签名中指定结构
Specifying struct in function signature
假设我有
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程序员的遗留变体。
请注意,struct
和class
本质上是相同的,并且都定义了一个类,因此在c++中对C风格的POD结构没有特殊的处理。
[编辑:显然是一个小区别,参见Mark B的优秀答案]
相关文章:
- 使用不带参数的函数访问结构元素
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 链表,反向函数,数据结构
- 结构向量中自定义结构函数的内存使用
- C++ 中的嵌套结构函数
- 在结构函数之间传递文件路径 C++ 编辑:修复LNK2019错误
- 如何将值从外部传递到结构函数
- 如果存在具有不同参数的继承成员,为什么对 C++ 结构函数的调用不明确?
- C++结构函数的多个定义
- C++ 另一个标头中的结构函数给出"missing type specifier"
- 如何在C中找到结构/函数的父头文件
- C++二进制文件到结构函数
- C++ 将结构函数作为继承结构中函数的参数传递
- 如何在 main 之外的类中使用结构函数
- 在类中使用结构函数,在基类 c++ 中使用变量
- C++ 结构函数体调用另一个结构函数,同一个模块
- 是存储在对象中的类/结构函数
- Eclipse CDT 在从 std::map 访问时无法解析结构函数
- C++模板自身名称作为模板模板参数在同一模板结构函数内传递
- 如何使用真正的字符串类型来表示类结构函数中的字符串