C++sizeof実例解析
C++の中でsizeofを使うのはCより複雑です。C++類にはstatic静的変数、virtual虚関数、継承、派生などがあります。sizeofはC言語の一つの単眼オペレータで、C言語の他のオペレータ+、--などです。関数ではないです。sizeofオペレータは、その動作数の記憶サイズをバイト形式で与えた。サイゼフの使用形態は三つあります。サイゼフ(var_)nameまたはsize of var_nameまたはsizeof(var_)タイプ)例1:(構文及び構文関数を無視した列)
Aは空のクラスなので、バイトの1割は2つの異なるオブジェクトを区別するためであり、プレースホルダと見なしても良いし、バイトのアドレスは対象のアドレスである。ここの1も絶対ではないです。コンパイラのような設定です。例2):
class A
{
public:
void hello(){}
};
sizeof(A)= 1;
は、必ずゼロではない。例を挙げると、ゼロならば、class A[10]オブジェクト配列を宣言しますが、オブジェクトごとの空間はゼロです。この場合、A[0]とA[1]は区別できません。Aは空のクラスなので、バイトの1割は2つの異なるオブジェクトを区別するためであり、プレースホルダと見なしても良いし、バイトのアドレスは対象のアドレスである。ここの1も絶対ではないです。コンパイラのような設定です。例2):
class B
{
public:
void hello(){}
static int i;
};
sizeof(B) = 1;
static変数はクラスで共有されているので、静的領域に空間を割り当て、コンパイル時に空間を割り当て、クラスメモリを占めない。例3:
classC
{
public:
virtual void hello(){}
};
sizeof(C)= 4;
B類には虚関数があり、これに対応して虚表ポインタが存在し、4バイトを占め、ちょうどポインタの空間である。また、複数のvirtual関数がある場合や、複数のクラスがCクラスを継承している場合、虚数関数も4バイトしか占めていません。例えば、【例4】:
class D : public C
{
public:
virtual void world(){}
virtual void nihao(){}
};
sizeof(D)= 4;
【例5】:
class E
{
public:
virtual void hello(){}
virtual void world(){}
staticint i;
static int j;
int k;
};
sizeof(E) = 8;
はあなたを助けてほしいです。