【发布时间】:2011-12-09 22:48:21
【问题描述】:
在下面的代码 sn-p 中,如果我继承前 2 个类,派生类的大小为 1,从 omwards 如果继承更多的类到派生,派生类的大小会增加这些类的数量.为什么?
// Remove the comment one by one at derived class (//Base1, //Base2//, Base3//, Base5, //Base6) and check.
struct Base {
Base(){}
};
struct Base1 {
Base1(){}
};
struct Base2 {
Base2(){}
};
struct Base3 {
Base3(){}
};
struct Base5 {
Base5(){}
};
struct Base6 {
Base6(){}
};
struct Derived : Base, Base1, Base2//, Base3//, Base5, //Base6
{
public:
Derived(){}
};
int main() {
Derived der;
cout << "Sizeof der: " << sizeof(der) << endl;
}
【问题讨论】:
-
尽量让你的问题更清楚,并发布输出。
-
void main()是无效的 C++。 -
类的大小取决于编译器,所以问题不应该是“在 C++ 中”,而应该是“在 Visual C++ 2008 中,编译调试时”。
-
你真的需要那些空的构造函数吗?你的国家不使用号码
4吗? -
¤ C++ 支持所谓的 空基类 优化,其中基类子对象不影响派生类的大小,C++11 §1.8 /5。对此的一个限制是相同类型的子对象必须具有不同的地址。但无论如何,当你不断添加不同类型的基时,如果编译器很聪明(比如 g++),它们应该被优化掉,如果它不聪明(比如 Visual c++),每个都可以加 1大小以获得唯一的子对象地址。顺便说一句,
void main不是标准的。它阻止使用 g++ 进行测试。干杯&hth.,
标签: c++