我想知道一个班级的人数限制是多少。我做了一个简单的测试:
#define CLS(name,other) \
class name\
{\
public: \
name() {};\
other a;\
other b;\
other c;\
other d;\
other e;\
other f;\
other g;\
other h;\
other i;\
other j;\
other k;\
};
class A{
int k;
public:
A(){};
};
CLS(B,A);
CLS(C,B);
CLS(D,C);
CLS(E,D);
CLS(F,E);
CLS(G,F);
CLS(H,G);
CLS(I,H);
CLS(J,I);
它无法编译
“‘J’:类太大”
如果我删除最终声明 -CLS(J,I);
,一切都编译得很好。
这是编译器施加的限制,还是标准中的某个地方?
在 C++11 中,这是附录 B。实现可以施加限制,但它们至少应该是:
- 对象的大小[262 144]。
- 单个类中的数据成员 [16 384]。
- 在单个类中声明的成员 [4 096]。
第三个与您正在使用的构造类型没有直接关系,我提到它只是因为它表明第二个确实是total成员,大概包括基地里的成员,我不确定成员的成员。但这不仅仅涉及单个类定义中列出的成员。
您的实现似乎放弃了 2^31 个数据成员,或者大小为 2^32,因为它接受I
但不是J
。编译器拒绝考虑大小大于的类显然是合理的SIZE_MAX
,即使程序碰巧没有实例化它或使用sizeof
关于类型。因此,即使编译器尽了最大努力,我也不会期望它能在 32 位实现上工作。
请注意,“这些数量只是指导方针,并不决定合规性”,因此即使有足够的资源来编译使用较大数字的程序,合规含义也可以施加任意较小的限制。一致性没有最低限制。
在 C++ 标准中,由于资源限制小得离谱,一致性实现有很多机会变得毫无用处,因此,如果这是另一种实现,也不会造成额外的损害。
C++03 或多或少是相同的:
- 对象的大小[262 144]。
- 单个类、结构或联合中的数据成员 [16 384]。
- 在单个类中声明的成员 [4 096]。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)