最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中變量進行初始化的3種方法

 更新時間:2024年02月29日 16:09:21   作者:fengbingchun  
本文主要介紹了C++中變量進行初始化的3種方法,包括用"=",構(gòu)造函數(shù)初始化以及統(tǒng)一初始化這三種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.用"=":copy initialization,這種初始化形式是從C繼承的。此種方式(拷貝初始化)的初始化在現(xiàn)代C+中已不再受歡迎,因為對于某些復(fù)雜類型來說,此種方式初始化的效率低于其它形式的初始化。

每當(dāng)隱式拷貝或轉(zhuǎn)換值時,也會使用拷貝初始化,例如按值將參數(shù)傳遞給函數(shù)、按值從函數(shù)返回或按值捕獲異常時。

2.構(gòu)造函數(shù)初始化:通過括號(parentheses)提供值來聲明變量。構(gòu)造函數(shù)初始化和舊的普通初始化方式(=)的區(qū)別在于,它總是返回括號中的最后一個值,無論它的大小或符號是什么。

direct initialization:就像拷貝初始化一樣,直接初始化在現(xiàn)代C++中已經(jīng)不再受歡迎,很大程度上是因為被列表初始化所取代。然而,我們現(xiàn)在知道列表初始化有其自身的一些怪癖,因此直接初始化在某些情況下再次得到使用。

當(dāng)值顯式轉(zhuǎn)換為另一種類型時,也會使用直接初始化。

直接初始化不受歡迎的原因之一是它使得很難區(qū)分變量和函數(shù):

int x();  // forward declaration of function x
int x(0); // definition of variable x with initializer 0

3.統(tǒng)一初始化(list initialization or uniform initialization or brace initialization):C++中初始化對象的現(xiàn)代方法。用大括號代替括號(curly braces instead of parentheses)。與構(gòu)造函數(shù)初始化不同,此賦值方法只能采用大括號中的一個值,提供多個值將返回編譯錯誤。

列表初始化還有一個額外的好處:列表初始化中的"縮小轉(zhuǎn)換(narrowing conversions,是隱式轉(zhuǎn)換)"格式不正確。這意味著,如果你嘗試使用變量無法安全保存的值來初始化變量,則編譯器需要生成診斷信息(通常是錯誤)。

拷貝和直接初始化只會刪除小數(shù)部分,從而導(dǎo)致值初始化為可變寬度。你的編譯器可能會選擇性地警告你這一點,因為很少希望丟失數(shù)據(jù)。但是,通過列表初始化,編譯器需要在這種情況下生成診斷。

你可以在通常進行初始化的任何地方使用大括號初始化,例如,作為函數(shù)參數(shù)或返回值,或者與new關(guān)鍵字一起使用。

Value initialization and zero initialization: 當(dāng)使用空大括號初始化變量時,將進行值初始化。在大多數(shù)情況下,值初始化會將變量初始化為零(或空,如果這更適合給定類型)。在發(fā)生歸零的情況下,這稱為歸零初始化。

什么時候應(yīng)該使用{0}和{}進行初始化
(1).如果你實際使用該值,請使用顯式初始化值。
(2).如果值是臨時的并且將被替換,請使用值初始化。

優(yōu)先選擇直接列表初始化(或值初始化)來初始化變量。

以下為測試代碼,進行了描述說明

int test_variables_init()
{
	int val; // no initializer(default initialization): 在大多數(shù)情況下,默認(rèn)初始化不執(zhí)行初始化,并且使變量具有不確定的值


	// 1.using "="
	int val1 = 1; // copy initialization: 這種初始化形式是從C繼承的
	std::cout << "val1:" << val1 << "\n"; // val1:1


	// 2.constructor initialization: parentheses
	int val2(2); // direct initialization
	std::cout << "val2:" << val2 << "\n"; // val2:2

	int val3 = (3);
	std::cout << "val3:" << val3 << "\n"; // val3:3

	// 構(gòu)造函數(shù)初始化和舊的普通初始化方式(=)的區(qū)別在于,它總是返回括號中的最后一個值,無論它的大小或符號是什么
	int val4 = (4, 5, 6, 7, -8);
	std::cout << "val4:" << val4 << "\n"; // val4:-8


	// 3.uniform initialization: curly braces
	int val5{ 9 }; // direct list initialization
	std::cout << "val5:" << val5 << "\n"; // val5:9

	int val6 = { 10 }; // copy list initialization
	std::cout << "val6:" << val6 << "\n"; // val6:10

	// 與構(gòu)造函數(shù)初始化不同,統(tǒng)一初始化方法只能采用大括號中的一個值,提供多個值將返回編譯錯誤
	//int val7 = { 11, 12 }; // error C2440: "初始化": 無法從"initializer list"轉(zhuǎn)換為"int"

	int val8{}; // value initialization
	int val12{ 0 }; // explicit initialization to value 0
	std::cout << "val8:" << val8 << "\n"; // val8:0

	// 列表初始化中的"縮小轉(zhuǎn)換(narrowing conversions)"格式不正確
	//int val9{ 4.5 }; // error C2397: 從"double"轉(zhuǎn)換到"int"需要收縮轉(zhuǎn)換
	int val10 = 4.5; // warning C4244: "初始化": 從"double"轉(zhuǎn)換到"int",可能丟失數(shù)據(jù)
	int val11(4.5); // warning C4244: "初始化": 從"double"轉(zhuǎn)換到"int",可能丟失數(shù)據(jù)

	return 0;
}

執(zhí)行結(jié)果如下圖所示:

GitHubhttps://github.com/fengbingchun/Messy_Test

到此這篇關(guān)于C++中變量進行初始化的3種方法的文章就介紹到這了,更多相關(guān)C++ 變量進行初始化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何利用C++實現(xiàn)Mystring類

    詳解如何利用C++實現(xiàn)Mystring類

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)MyString的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言編程實現(xiàn)掃雷游戲

    C語言編程實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言編程實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言Static?關(guān)鍵字解析

    C語言Static?關(guān)鍵字解析

    這篇文章主要介紹了C語言Static?關(guān)鍵字解析,C語言中staic關(guān)鍵字很簡單,簡單到你的任何一個項目中可以不寫一個staic關(guān)鍵字也是沒有問題的。寫這篇章主要是一下自己的staic的理解和應(yīng)用,當(dāng)然在章開頭依舊要照本宣科簡述一下static關(guān)鍵字,需要的朋友可以參考一下
    2022-02-02
  • OpenCV實現(xiàn)圖像輪廓檢測以及外接矩形

    OpenCV實現(xiàn)圖像輪廓檢測以及外接矩形

    這篇文章主要為大家詳細(xì)介紹了OpenCV實現(xiàn)圖像輪廓檢測以及外接矩形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Qt實現(xiàn)獲取文件大小與磁盤空間大小

    Qt實現(xiàn)獲取文件大小與磁盤空間大小

    這篇文章主要為大家詳細(xì)介紹了如何使用Qt實現(xiàn)獲取文件大小與磁盤空間大小,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • C++智能指針的補充和特殊類的設(shè)計示例詳解

    C++智能指針的補充和特殊類的設(shè)計示例詳解

    智能指針不僅能夠有效避免內(nèi)存泄漏,還能簡化代碼邏輯,提升程序的健壯性和可維護性,這篇文章主要介紹了C++智能指針的補充和特殊類設(shè)計的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • C++實現(xiàn)電子時鐘效果

    C++實現(xiàn)電子時鐘效果

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)電子時鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • VC++中的字體設(shè)置方法詳解

    VC++中的字體設(shè)置方法詳解

    以下是對VC++中的字體設(shè)置方法進行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-09-09
  • C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    這篇文章主要介紹了C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • C語言之結(jié)構(gòu)體定義 typedef struct 用法詳解和用法小結(jié)

    C語言之結(jié)構(gòu)體定義 typedef struct 用法詳解和用法小結(jié)

    這篇文章主要介紹了C語言的結(jié)構(gòu)體定義typedef struct用法詳解和用法小結(jié),typedef是類型定義,typedef struct 是為了使用這個結(jié)構(gòu)體方便,感興趣的同學(xué)可以參考閱讀
    2023-03-03

最新評論

昌图县| 虹口区| 西畴县| 辰溪县| 中西区| 鄂州市| 福州市| 丽水市| 霍山县| 凌云县| 北宁市| 沙河市| 竹北市| 炉霍县| 曲阳县| 郴州市| 芦溪县| 横山县| 嘉善县| 新宁县| 尼玛县| 方正县| 远安县| 铁岭市| 晋州市| 泰兴市| 云安县| 西安市| 车致| 漯河市| 新和县| 平阴县| 通道| 滁州市| 满城县| 玛纳斯县| 河西区| 桐庐县| 临朐县| 乐昌市| 邯郸县|