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

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

/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



你可能感兴趣的:(C++对象模型 ch3 Data语义学)