class test {
public:
test(int i) : t(10) {
cout << "cst" << i << endl;
}
static test ins;
const test t;// 1
};
Run Code Online (Sandbox Code Playgroud)
在第 1 行,编译器失败并出现错误:
不允许不完整的类型
这是为什么?
编译器从上到下解析代码。当编译器遇到 的声明时t,它还没有看到 声明的结尾test,因此为什么test在该位置是“不完整类型”。编译器还不知道后面是否还有更多的数据成员t,因此它不知道要保留多少空间t在 的每个实例中要保留多少空间test。
基本上, a class(或struct) 不能包含非静态其自身的这样做会导致递归声明永远不会结束,直到编译器失败。
但是,class/struct可以包含指向自身的指针或引用,因为指针/引用在编译时具有固定大小。例如,这就是链表的实现方式。
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |