最近看到一种比较新颖的写法 —— 结构体在头文件中声明, 源文件中定义函数
A.hspa
typedef struct Context Context;
A.cppcode
#include "stdafx.h" #include "A.h" struct Context { int param; char *str; };
原觉得这样应该会报错, 由于头文件中的 "struct Context" 应该是找不到的, 但amazing, 居然能顺利编译过, 由此让我加深了对声明和定义的理解.blog
就像函数在头文件中声明, 而在源文件中定义同样, 由于函数的声明和定义通常都分开写, 因此习觉得常, 但结构体通常都是声明和定义一块儿的, 或者说只有定义吧, 因此对这写法一会儿没反应过来.编译
这样写的好处是: 对用户透明. 试想一下, 你要写一个库, 里面有个结构体, 但这个结构体只是内部使用和做为参数传递, 那么用户天然就不关心这结构题的内部结构了, 用户只要知道哪一个函数返回该结构体和哪一个函数要使用该结构体做为参数, 只要引用和传递, 因此, 只在头文件声明该结构体, 让用户能够声明和传递这一结构体的变量便可.class
类也能够声明和定义分开, 但好处暂时未想到. 这是C++的思想了!变量
学术浅薄, 不足之处, 望请指出引用