C/C++编程:不完整类型

定义

不完整类型是这样一种类型,它缺乏足够的信息例如长度去描述一个完整的对象。也就是说,如果在编译期编译器能计算出一个类型的size,那么它就是一个完整类型,否则就是不完整类型

事实上我们在实际的工程设计中经常使用不完整类型,只不过不知道有这么个概念而已。前向声明就是一种常用的不完整类型:

class base;
struct test;

base和test只给出了声明,没有给出定义。不完整类型必须通过某种方式补充完整,才能使用它们进行实例化,否则只能用于定义指针或引用,因为此时实例化的是指针或引用本身,不是base或test对象。

一个未知长度的数组也属于不完整类型:

extern int a[];

extern不能去掉,因为数组的长度未知,不能作为定义出现。

例子

比如如下的向前声明,编译器遇到它时,并无法判断student这个类型有占用多大的空间,所以它就是一个不完整类型:

struct student *ps;

当编译器遇到student的定义时它就成了一个完整类型

struct student
{
    
    
    int num;
}    

如何判断一个类型是完整类型(complete type)

只要对一个类型sizeof(T)能正确计算,这个T就是一个完整类型。

所以判断T是否为完整类型的模板函数就可以写成如下的样子:

其他

类的向前声明

  • 类的向前声明简单地说就是告诉当前文件有这么一个类。但这个类的具体结构,成员函数什么的都是未知的。仅能用于在当前文件声明类的引用或指针,不能具体实例化这个类。因为这个了的情况位置

参考

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/114948642