c++ sizeof

本文深入探讨了C++中类的sizeof操作符如何计算类的大小,涉及基本数据类型、指针、字符串、向量等元素,并通过实例展示了不同类结构对sizeof结果的影响。

本机环境64bit mac os,xcode

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class test{
public:
    test();
    virtual ~test();
    virtual void get_a_c();
private:
    int a;
    char c;
};//8+5

class derived_test:public test{
public:
    virtual ~derived_test();
private:
    double d;
};//8+5+8

class base{
private:
    char a;//1
     static int reference_count;//

public:
    base();
    virtual ~base();//8
    static int get_count();
};

int base::get_count(){
    return reference_count;
}

int base::reference_count=0;

class new_base{
private:
    char a;//1
    double price;//8
    std::vector<double> dvec;//24
    std::string name;//24
    static int reference_count;
public:
    new_base();
    virtual ~new_base();//8
    static int get_count();
};

int new_base::get_count(){
    return reference_count;
}

int new_base::reference_count=0;

class derived:public base{
private:
    int min_qty;//4
    double discount;//8
    static int newp;
public:
    derived();
    virtual ~derived(){};
};

class new_derived:public new_base{
private:
    double discount;//8
    int min_pty;//4
    static int newp;
public:
    new_derived();
    virtual ~new_derived(){};
};

int main(){

    cout<<sizeof(test)<<endl;
    cout<<sizeof(derived_test)<<endl;
    cout<<sizeof(base)<<endl;
    cout<<sizeof(new_base)<<endl;
    cout<<sizeof(derived)<<endl;
    cout<<sizeof(new_derived)<<endl;
    return 0;
}

16
24
72
72
88
88
Program ended with exit code: 0

测试2

#include <iostream>
using namespace std;

class A{};//1
class B{
    void fun();//1
};
class C{
    virtual void fun();//8
};
class D{
    virtual void fun1();
    virtual void fun2();//8
};
class E:public virtual A{
    
};
class F:public virtual A{
    virtual void fun();
};
class G:public A{

};


int main(){
    cout<<sizeof(A)<<endl;
    cout<<sizeof(B)<<endl;
    cout<<sizeof(C)<<endl;
    cout<<sizeof(D)<<endl;
    cout<<sizeof(E)<<endl;
    cout<<sizeof(F)<<endl;
    cout<<sizeof(G)<<endl;
    return 0;
}

1
1
8
8
8
8
1
Program ended with exit code: 0




总结:


int: 4Byte
point: 8Byte
std::string name;//24
double price;//8
std::vector<double> dvec;//24
virtual void get();//8
static int count;//0
class B : public virtual A{};//8
类的sizeof的大小跟操作系统(本机按8Byte对齐)和编译器有关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值