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