三亚旅游网站策划书,旗舰店的网站怎么做,网络推广运营优化,深圳公司注册中介C中将 sizeof() 用于类
您知道#xff0c;通过使用关键字 class 声明自定义类型#xff0c;可封装数据属性和使用数据的方法。运算符 sizeof( )用于确定指定类型需要多少内存#xff0c;单位为字节。这个运算符也可用于类#xff0c;在这种情况下#xff0c;它将指出类声…C中将 sizeof() 用于类
您知道通过使用关键字 class 声明自定义类型可封装数据属性和使用数据的方法。运算符 sizeof( )用于确定指定类型需要多少内存单位为字节。这个运算符也可用于类在这种情况下它将指出类声明中所有数据属性占用的总内存量单位为字节。 sizeof( )可能对某些属性进行填充使其与字边界对齐也可能不这样做这取决于您使用的编译器。用于类时 sizeof() 不考虑成员函数及其定义的局部变量如以下示例程序所示
#include iostream
#include string.h
using namespace std;class MyString
{
private:char* buffer;public:MyString(const char* initString) // default constructor{buffer NULL;if(initString ! NULL){buffer new char [strlen(initString) 1];strcpy(buffer, initString);}}MyString(const MyString copySource) // copy constructor{buffer NULL;if(copySource.buffer ! NULL){buffer new char [strlen(copySource.buffer) 1];strcpy(buffer, copySource.buffer);}}~MyString(){delete [] buffer;}int GetLength() { return strlen(buffer); }const char* GetString(){ return buffer; }
};class Human
{
private:int age;bool gender;MyString name;public:Human(const MyString InputName, int InputAge, bool InputGender): name(InputName), age (InputAge), gender(InputGender) {}int GetAge (){ return age; }
};int main()
{MyString mansName(Adam);MyString womansName(Eve);cout sizeof(MyString) sizeof(MyString) endl;cout sizeof(mansName) sizeof(mansName) endl;cout sizeof(womansName) sizeof(womansName) endl;Human firstMan(mansName, 25, true);Human firstWoman(womansName, 18, false);cout sizeof(Human) sizeof(Human) endl;cout sizeof(firstMan) sizeof(firstMan) endl;cout sizeof(firstWoman) sizeof(firstWoman) endl;return 0;
}使用 32 位编译器的输出
sizeof(MyString) 4
sizeof(mansName) 4
sizeof(womansName) 4
sizeof(Human) 12
sizeof(firstMan) 12
sizeof(firstWoman) 12使用 64 位编译器的输出
sizeof(MyString) 8
sizeof(mansName) 8
sizeof(womansName) 8
sizeof(Human) 16
sizeof(firstMan) 16
sizeof(firstWoman) 16分析 这个示例很长它包含 MyString 类和 Human 类。其中的 Human 类使用 MyString 对象来存储姓名 name并新增了 bool 数据成员 gender。 首先来分析输出。从中可知将 sizeof( )用于类及其对象时结果相同。 sizeof(MyString) 和 sizeof(mansName)的值相同因为类占用的字节数在编译阶段就已确定。虽然 mansName 包含 Adam而 womanName 包含 Eve但它们占用的字节数相同这没什么可奇怪的因为存储姓名的 MyString::buffer 是一个 char *这是一个大小固定的指针在 32 位系统中为 4 字节而与指向的数据量无关。 将 sizeof( )用于 Human 时结果为 12。第 4446 行表明 Human 包含一个 int 成员、一个 bool 成员和一个 MyString 成员。要获悉内置类型占用的字节数。从该程序清单可知 int 占用 4 字节 bool 占用 1 字节而 MyString 占用 4 字节。它们的总和与输出中的 12 字节不符这是因为 sizeof( )的结果受字填充 word padding和其他因素的影响。
该文章会更新欢迎大家批评指正。
推荐一个零声学院的C服务器开发课程个人觉得老师讲得不错 分享给大家LinuxNginxZeroMQMySQLRedis fastdfsMongoDBZK流媒体CDNP2PK8SDocker TCP/IP协程DPDK等技术内容 点击立即学习C/C后台高级服务器课程