我想知道课程的大小限制是多少.我做了一个简单的测试:
#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);
Run Code Online (Sandbox Code Playgroud)
它无法编译
"'J':上课太大了"
如果我删除最后的声明 - CLS(J,I);,这一切都很好.
这是编译器强加的限制,还是在标准的某个地方?
Ste*_*sop 15
在C++ 11中,这是附录B.实现可以施加限制,但它们至少应该是:
第三个与你正在使用的建筑类型没有直接关系,我之所以提到它只是因为它表明第二个确实是整个成员,可能包括基地的那些,我不确定成员 - -成员.但它不仅仅是关于单个类定义中列出的成员.
您的实现似乎放弃了2 ^ 31个数据成员,或者大小为2 ^ 32,因为它接受I但不接受J.编译器拒绝考虑大小大于的类是非常合理的SIZE_MAX,即使程序没有实例化它或sizeof在类型上使用它.因此,即使编译器尽可能地做出最大的努力,我也不会期望这可以在32位实现上工作.
请注意,"这些数量只是指导原则并且不确定合规性",因此即使在有足够资源编译使用较大数字的程序的情况下,符合要求的含义也可以施加任意较小的限制.一致性没有最低限制.
由于资源限制非常小,C++标准中有各种机会使符合要求的实现变得无用,因此如果这是另一个,则不会造成额外的伤害.
C++ 03或多或少相同: