返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中的类的大小详解
  • 401
分享到

C++中的类的大小详解

2024-04-02 19:04:59 401人浏览 独家记忆
摘要

目录一、普通类的大小二、空类的大小三、自动填充类或者结构体的大小总结一、普通类的大小 #include<iOStream> using namespace std; c

一、普通类的大小

#include<iOStream>

using namespace std;
class MyClass
{
public:
	MyClass(){
		int i = 0;
		float f = 0.01f;
	};
	int getI(){
		return i;
	}
	int getF(){
		return f;
	}
private:
	int i;
	float f;
	//静态变量实际上是其全局变量,它存储在全局/静态存储区,不占对象空间
	static int staNum;
};
int MyClass::staNum = 2;
int main()
{
	MyClass myclass;
	cout << "myclass的大小" << sizeof(myclass) << endl;
	return 0;
}

在这里插入图片描述

我们可以看到,在创建类的对象中,真正占据栈空间的只有两个成员变量,分别为4个字节。静态成员变量实际上与全局变量一起存储在全局存储区,而成员函数则与其他函数一样存在于代码区。

二、空类的大小

#include<iostream>

using namespace std;
class MyClass
{
public:
	MyClass(){};
private:
};

int main()
{
	MyClass myclass;
	cout << "myclass的大小" << sizeof(myclass) << endl;
	return 0;
}

在这里插入图片描述

在使用类的指针的时候,如果类的的大小为0,那么排在一起的几个空类地址都是一样的话,我们又怎么知道是哪个呢?

三、自动填充类或者结构体的大小

#include<iostream>

using namespace std;
struct MyStruct1
{
	bool b1;
	bool b2;
	int i1;
};
struct MyStruct2
{
	bool b1;
	int i1;
	bool b2;
};
struct MyStruct3
{
	bool b1;
	short s1;
};

int main()
{
	MyStruct1 s1;
	MyStruct2 s2;
	MyStruct3 s3;
	cout << "MyStruct1的大小" << sizeof(s1) << endl;
	cout << "MyStruct2的大小" << sizeof(s2) << endl;
	cout << "MyStruct3的大小" << sizeof(s3) << endl;

	return 0;
}

在这里插入图片描述

当我们按照不同的的顺序排列变量的时候会发现,类的大小是不尽相同的。第一种情况,MyStruct中的两个布尔连在一起,如果后面没有变量,编译器会自动填充2个字节;而现在后面还有一个整形i,整形跨越了两个4字节,在读取整形的时候需要两个4字节,因此编译器会在这种情况下也会在i1填充2个字节,从而是i1在下一个字节开始。对于第二种情况,MyStruct2中由于两个布尔类型被整形隔开,我们需要两次填充。第三种情况,MyStruct3中由于short只有两个字节,因此只需要填充一个字节。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容! 

--结束END--

本文标题: C++中的类的大小详解

本文链接: https://lsjlt.com/news/144035.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++中的类的大小详解
    目录一、普通类的大小二、空类的大小三、自动填充类或者结构体的大小总结一、普通类的大小 #include<iostream> using namespace std; c...
    99+
    2024-04-02
  • C++类的大小介绍
    1、C++结构体和类的关系 为什么讲C++类的大小要提到结构体呢,因为可能很多和我一样的学子,接触过C语言的结构体对齐,但不明白类的大小怎么计算,这其中都要用到内存对齐的概念,对于内...
    99+
    2024-04-02
  • C语言的变量类型及内存大小详解
    类型 存储大小 值范围 c输入输出格式 ...
    99+
    2024-04-02
  • C++中类的大小实例分析
    这篇“C++中类的大小实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中类的大小实例分析”文章吧。一、普通类的大...
    99+
    2023-06-29
  • C#中调整图像大小的步骤详解
    在本篇文章中,我将介绍如何在C#中来调整你想要的图像大小。要实现这一目标,我们可以采取以下几个步骤: 1.首先要获取你想要调整大小的图像: string path = Serve...
    99+
    2024-04-02
  • C++类中的六大默认成员函数详解
    在C++中,当你去创建一个类的时候,即便这个类是空类,也会自动生成下面6个默认成员函数,在本篇博客中,我将逐一分析下面6个默认成员函数。 构造函数 构造函数并不是去构造函数的函数,...
    99+
    2024-04-02
  • 详解C++中类的六大默认成员函数
    目录一、类的默认成员函数二、构造函数Date(形参列表)1、构造函数的函数名和返回值2、构造函数的调用3、构造函数的重载4、系统生成的默认构造函数5、系统生成的默认构造函数的作用6、...
    99+
    2022-11-13
    C++类默认成员函数 C++类六大默认成员函数 C++类成员函数
  • C#中的类继承详解
    目录前言类的继承注意事项寄语总结前言 在日常的程序编码工作中,我们的最终目标是完成公司交给自己的开发任务,核心目标是写出好代码。 那么什么是好代码? 高内聚,低耦合 想必从事编码工作...
    99+
    2024-04-02
  • Javadouble类型比较大小详解
    目录Java double类型比较大小一、问题描述二、解决方法关于两个double类型数的大小判断Java double类型比较大小 一、问题描述 把从数据库里查询出来的数据,金额小...
    99+
    2024-04-02
  • Java中long类型与Long类型的区别和大小比较详解
    前言最近在学习java,接触到了long类型,发现网上这方面的资料较乱,所以决定总结一下,在Java中我们经常要做一些判断,而对于判断的话,用的最多的便是“>”、“==”、“<”的比较,这里我们进行一个Long类型数据和long...
    99+
    2023-05-30
    java long类型 ava
  • 详解C#中Helper类的使用
    目录使用背景使用方法1.引用CSRedisCore2.增加helper类代码3.使用4.说明结语使用背景 项目中用户频繁访问数据库会导致程序的卡顿,甚至堵塞。使用缓存可以有效的降低用...
    99+
    2024-04-02
  • C#中的HttpWebRequest类用法详解
    HttpWebRequest 是一个Http 请求类,继承于 WebRequest。 WebRequest 是一个抽象类,能够对统一资源标识符 (URI) 发出请求。 WebRequ...
    99+
    2024-04-02
  • C#中的Hashtable 类使用详解
    目录一:Hashtable 类简单说明二:Hashtable 类的构造函数三:Hashtable 类的属性四:Hashtable 类的常用方法1: Hashtable.Add(Obj...
    99+
    2024-04-02
  • C#中ArrayList 类的使用详解
    目录一:ArrayList 类简单说明二:ArrayList 类的构造函数三:ArrayList 类的属性1:使用举例说明四:ArrayList 类的常用方法1: AddRange(...
    99+
    2024-04-02
  • C#中backgroundWorker类的用法详解
    BackgroundWorker类是C#中一个非常常用的多线程类,它可以在后台运行一个操作,并且可以与UI线程进行交互。下面是Bac...
    99+
    2023-08-14
    C#
  • C#中ArrayList 类的使用详解
    ArrayList是C#中的一种动态数组,它可以存储任何类型的对象。以下是ArrayList类的使用详解:1. 导入命名空间:在使用ArrayList类之前,需要在文件的开头导入System.Collections命名空间。2. 创建A...
    99+
    2023-08-11
    C#
  • C++中的最小值函数详解
    C++中的最小值函数详解在C++的标准库中,有一个名为“min”的函数,它用于返回两个给定参数中较小的一个。这个函数在C++中很常用,因为在编程时我们经常需要比较两个变量中的最小值。在本文中,我们将详细介绍C++中的最小值函数,包括有关如何...
    99+
    2023-11-18
    C++ 详解 最小值函数
  • c++中的基本IO类型详解
    引言 c++不直接处理输入和输出,而是通过标准库中的类型处理IO。IO的设备可以是文件、控制台、string。c++主要定义了三种IO类型,分别被包含在iostream、fstrea...
    99+
    2024-04-02
  • C#中类的异常处理详解
    目录前言异常寄语总结前言 日常编码过程中,最重要的技能不是说你学会使用很多最新的编程技术或者做出一个高大上的系统。而是你在写代码过程中,对异常的处理,是否系统可以稳定,健壮。 对于异...
    99+
    2024-04-02
  • 详解C++11中的类型推断
    C++11中的类型推断 C++11中为了更好的支持泛型编程,提供了 auto和decltype两个关键词,目的就是提供编译阶段的自动类型推导。 1.auto关键词的新意义 在C++9...
    99+
    2023-01-31
    C++11类型推断 C++11推断
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作