现在的位置: 首页 > 综合 > 正文

C++对象模型 ch3 Data语义学

2013年04月02日 ⁄ 综合 ⁄ 共 796字 ⁄ 字号 评论关闭

例子,求下面的程序输出。

/home/a/j/nomad2:cat ch3.CPP
#include <iostream>
using namespace std;

class X
{
};

class Y : public virtual X
{
        /*
        public:
                char c;
                */
};

class Z : public virtual X
{
        /*
        public:
                char d;
                */
};

class A : public Y, public Z
{
};

int main()
{
        cout << sizeof(X) << endl;
        cout << sizeof(Y) << endl;
        cout << sizeof(Z) << endl;
        cout << sizeof(A) << endl;
}

输出如下:

/home/a/j/nomad2:uname -a
Linux ubuntu 2.6.24-22-generic #1 SMP Mon Nov 24 19:35:06 UTC 2008 x86_64 GNU/Linux
/home/a/j/nomad2:./a.out
1
8
8
16

Each class object, then, is exactly the size necessary to contain the nonstatic data members of its class. This size may at times surprise you as being larger than necessary, as it did my correspondent from France. This girth comes about
in two ways:

1. Additional data members added by the compilation system to support some language functionality (primarily the virtuals)

2. Alignment requirements on the data members and data structures as a whole

抱歉!评论已关闭.