gpt4 book ai didi

c++ - 一个类(class)的规模限制是多少?

转载 作者:可可西里 更新时间:2023-11-01 16:31:33 26 4
gpt4 key购买 nike

我想知道类的大小限制是多少。我做了一个简单的测试:

#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' : class is too large"

如果我删除最后的声明 - CLS(J,I);,它都可以正常编译。

这是编译器强加的限制,还是标准中的某处?

最佳答案

在 C++11 中,这是附件 B。实现可以施加限制,但至少应:

  • 对象的大小 [262 144]。
  • 单个类中的数据成员 [16 384]。
  • 在单个类中声明的成员 [4 096]。

第三个与您正在使用的构造类型没有直接关系,我提到它只是因为它表明第二个确实是 成员,大概包括那些在基地我不确定成员中的成员。但这不仅仅是关于单个类定义中列出的成员。

您的实现似乎放弃了 2^31 个数据成员,或者大小为 2^32,因为它接受 I 但不接受 J。编译器拒绝考虑大小大于 SIZE_MAX 的类显然是合理的,即使程序碰巧没有实例化它或对该类型使用 sizeof。因此,即使编译器尽了最大努力,我也永远不会期望它能在 32 位实现上工作。

请注意,“这些数量只是指导方针,并不决定合规性”,因此符合蕴涵可以施加任意较小的限制,即使它有足够的资源来编译使用更大数量的程序。没有最低的一致性限制。

在 C++ 标准中,由于资源限制小得离谱,符合标准的实现有多种机会变得无用,因此如果这是另一个标准,也不会造成额外的伤害。

C++03 大致相同:

  • 对象的大小 [262 144]。
  • 单个类、结构或 union 中的数据成员 [16 384]。
  • 在单个类中声明的成员 [4 096]。

关于c++ - 一个类(class)的规模限制是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8520421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com