c ++:空のクラスとそのサブクラスが占めるスペース

目次

1.空の構造体/クラスはどのくらいのスペースを占有しますか?なぜそれがそれほど多くを占有するのですか?

2.空のクラスから継承するサブクラスはどのくらいのスペースを占有しますか?

3.空のクラスを継承する空のサブクラスはどのくらいのスペースを占有しますか?


1.空の構造体/クラスはどのくらいのスペースを占有しますか?なぜそれがそれほど多くを占有するのですか?

/*================================================================
*   Copyright (C) 2021 baichao All rights reserved.
*
*   文件名称:emptyClassSize.cpp
*   创 建 者:baichao
*   创建日期:2021年02月03日
*   描    述:
*
================================================================*/

#include <iostream>

struct base1{};
class base2{};

int main()
{
    std::cout<<"类base1的长度为:"<<sizeof(base1)<<std::endl;
    std::cout<<"结构体base2的长度为:"<<sizeof(base2)<<std::endl;
    return 0;
}

演算結果:

空のクラスまたは空の構造体は1バイトを占有します。これは、C ++では各インスタンスがメモリ内に一意のアドレスを持っている必要があるためです。空のクラスもインスタンス化されるため、コンパイラは暗黙的に空のクラスにバイトを追加し、インスタンス化後に空のクラスが一意のアドレスを持つようにします。したがって、空のクラスのsizeofは1です。

2.空のクラスから継承するサブクラスはどのくらいのスペースを占有しますか?

/*================================================================
*   Copyright (C) 2021 baichao All rights reserved.
*
*   文件名称:emptyClassSize.cpp
*   创 建 者:baichao
*   创建日期:2021年02月03日
*   描    述:
*
================================================================*/

#include <iostream>

struct base1{};
class base2{};

class rbase2:public base2
{
    int a;
};

int main()
{
    std::cout<<"结构体base1的长度为:"<<sizeof(base1)<<std::endl;
    std::cout<<"类base2的长度为:"<<sizeof(base2)<<std::endl;
    std::cout<<"类rbase2的长度为:"<<sizeof(rbase2)<<std::endl;
    return 0;
}

演算結果:

空のクラスを継承するサブクラスが占めるスペースには、空のクラスだけが占める1バイトが含まれなくなりました。これは、サブクラスにすでにメンバー変数があるためです。

3.空のクラスを継承する空のサブクラスはどのくらいのスペースを占有しますか?

/*================================================================
*   Copyright (C) 2021 baichao All rights reserved.
*
*   文件名称:emptyClassSize.cpp
*   创 建 者:baichao
*   创建日期:2021年02月03日
*   描    述:
*
================================================================*/

#include <iostream>

struct base1{};
class base2{};

class rbase2:public base2
{
    int a;
};

class rbase3:public base2
{
};
int main()
{
    std::cout<<"结构体base1的长度为:"<<sizeof(base1)<<std::endl;
    std::cout<<"类base2的长度为:"<<sizeof(base2)<<std::endl;
    std::cout<<"类rbase2的长度为:"<<sizeof(rbase2)<<std::endl;
    std::cout<<"空子类rbase3的长度为:"<<sizeof(rbase3)<<std::endl;
    return 0;
}

演算結果:

空のクラスを継承する空のサブクラスには、まだ1バイトしかありません。 

おすすめ

転載: blog.csdn.net/weixin_40179091/article/details/113672976