我正在查看我使用的C ++库的标头,并且有这样一行:
typedef struct asdf_t asdf_t;
源中的任何地方都没有asdf_t
的定义。这条线在做什么?
这就是声明不透明结构!该标头中可能有一些函数和/或类,它们将pointers用作asdf_t
类型-C ++中允许使用“未定义”结构。但是,不会(不能)声明作为asdf_t
实例的变量,类成员或函数参数。
为什么这么做?
通常,因为您使用的库的创建者不希望您知道该结构的详细信息!但是,它们必须提供这样的“最小”定义,以便您可以使用类等(必要时可以使用或引用该结构)。
这是一个转发的声明,基本上,如果没有定义,您也可以使用此类型(因此,您不能做任何需要了解他的确切定义的事情,例如,您不能复制,因为编译器必须知道他的大小)。