欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中的類的大小詳解

 更新時(shí)間:2022年03月27日 11:07:20   作者:想做后端的前端  
這篇文章主要為大家詳細(xì)介紹了C++中的類的大小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

一、普通類的大小

#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;
	//靜態(tài)變量實(shí)際上是其全局變量,它存儲(chǔ)在全局/靜態(tài)存儲(chǔ)區(qū),不占對(duì)象空間
	static int staNum;
};
int MyClass::staNum = 2;
int main()
{
	MyClass myclass;
	cout << "myclass的大小" << sizeof(myclass) << endl;
	return 0;
}

在這里插入圖片描述

我們可以看到,在創(chuàng)建類的對(duì)象中,真正占據(jù)棧空間的只有兩個(gè)成員變量,分別為4個(gè)字節(jié)。靜態(tài)成員變量實(shí)際上與全局變量一起存儲(chǔ)在全局存儲(chǔ)區(qū),而成員函數(shù)則與其他函數(shù)一樣存在于代碼區(qū)。

二、空類的大小

#include<iostream>

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

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

在這里插入圖片描述

在使用類的指針的時(shí)候,如果類的的大小為0,那么排在一起的幾個(gè)空類地址都是一樣的話,我們又怎么知道是哪個(gè)呢?

三、自動(dòng)填充類或者結(jié)構(gòu)體的大小

#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;
}

在這里插入圖片描述

當(dāng)我們按照不同的的順序排列變量的時(shí)候會(huì)發(fā)現(xiàn),類的大小是不盡相同的。第一種情況,MyStruct中的兩個(gè)布爾連在一起,如果后面沒有變量,編譯器會(huì)自動(dòng)填充2個(gè)字節(jié);而現(xiàn)在后面還有一個(gè)整形i,整形跨越了兩個(gè)4字節(jié),在讀取整形的時(shí)候需要兩個(gè)4字節(jié),因此編譯器會(huì)在這種情況下也會(huì)在i1填充2個(gè)字節(jié),從而是i1在下一個(gè)字節(jié)開始。對(duì)于第二種情況,MyStruct2中由于兩個(gè)布爾類型被整形隔開,我們需要兩次填充。第三種情況,MyStruct3中由于short只有兩個(gè)字節(jié),因此只需要填充一個(gè)字節(jié)。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容! 

相關(guān)文章

  • 為什么說C語言是永不過時(shí)的語言

    為什么說C語言是永不過時(shí)的語言

    時(shí)隔5年,C語言再次領(lǐng)先Java,榮登TIOBE編程語言排行榜第一,那么C語言為何不會(huì)過時(shí)?你需要掌握多少種語言呢,感興趣的朋友通過本文一起學(xué)習(xí)下吧
    2020-11-11
  • C++中求數(shù)組長(zhǎng)度的方法詳解

    C++中求數(shù)組長(zhǎng)度的方法詳解

    C++中沒有直接提供求數(shù)組長(zhǎng)度的方法,提供了sizeof(),begin(),end()等方法,可以供求數(shù)組長(zhǎng)度使用,文中通過代碼示例給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • C++&&Opencv實(shí)現(xiàn)控制臺(tái)字符動(dòng)畫的方法

    C++&&Opencv實(shí)現(xiàn)控制臺(tái)字符動(dòng)畫的方法

    這篇文章主要介紹了C++&&Opencv實(shí)現(xiàn)控制臺(tái)字符動(dòng)畫的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • OpenCV實(shí)現(xiàn)拼圖算法

    OpenCV實(shí)現(xiàn)拼圖算法

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)拼圖算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語言示例講解if else語句的用法

    C語言示例講解if else語句的用法

    這篇文章主要介紹C語言中的If Else語句怎么使用,在日常操作中,相信很多人在If Else語句怎么使用問題上存在疑惑,小編查閱了各式資料,整理出使用方法,接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧
    2022-06-06
  • C++智能指針shared_ptr與weak_ptr的實(shí)現(xiàn)分析

    C++智能指針shared_ptr與weak_ptr的實(shí)現(xiàn)分析

    shared_ptr是一個(gè)標(biāo)準(zhǔn)的共享所有權(quán)的智能指針,允許多個(gè)指針指向同一個(gè)對(duì)象,定義在 memory 文件中,命名空間為 std,這篇文章主要介紹了C++ 中 shared_ptr weak_ptr,需要的朋友可以參考下
    2022-09-09
  • C 語言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 web 服務(wù)器的原理解析

    C 語言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 web 服務(wù)器的原理解析

    這篇文章主要介紹了C 語言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 web 服務(wù)器的原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 用C語言判斷字符是否為空白字符或特殊字符的方法

    用C語言判斷字符是否為空白字符或特殊字符的方法

    這篇文章主要介紹了用C語言判斷字符是否為空白字符或特殊字符的方法,分別為isspace()函數(shù)的使用和ispunct()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • C語言中冒泡排序算法詳解

    C語言中冒泡排序算法詳解

    大家好,本篇文章主要講的是C語言中冒泡排序算法詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 基于c++ ege圖形庫實(shí)現(xiàn)五子棋游戲

    基于c++ ege圖形庫實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了基于c++ ege圖形庫實(shí)現(xiàn)五子棋游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評(píng)論