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

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++中用substr()函數(shù)消除前后空格的解決方法詳解

    C++中用substr()函數(shù)消除前后空格的解決方法詳解

    本篇文章是對C++中用substr()函數(shù)消除前后空格的方法進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中TinyXML讀取xml文件用法詳解

    C++中TinyXML讀取xml文件用法詳解

    本文主要介紹了C++中TinyXML讀取xml文件用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 深入理解C++編程中的局部變量和全局變量

    深入理解C++編程中的局部變量和全局變量

    這篇文章主要介紹了深入理解C++編程中的局部變量和全局變量,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • c語言常量定義規(guī)則知識點總結(jié)

    c語言常量定義規(guī)則知識點總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于c語言常量定義規(guī)則知識點總結(jié),需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • ACE反應(yīng)器(Reactor)模式的深入分析

    ACE反應(yīng)器(Reactor)模式的深入分析

    本篇文章是對ACE反應(yīng)器(Reactor)模式進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用C++實現(xiàn)Excel文件與CSV之間的相互轉(zhuǎn)換

    使用C++實現(xiàn)Excel文件與CSV之間的相互轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了如何使用C++實現(xiàn)Excel文件與CSV之間的相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06
  • OpenCV實現(xiàn)相機標(biāo)定板

    OpenCV實現(xiàn)相機標(biāo)定板

    這篇文章主要為大家詳細(xì)介紹了OpenCV實現(xiàn)相機標(biāo)定板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 如何為Qt視圖中的文字實現(xiàn)彩虹漸變效果

    如何為Qt視圖中的文字實現(xiàn)彩虹漸變效果

    這篇文章主要給大家介紹了關(guān)于如何為Qt視圖中的文字實現(xiàn)彩虹漸變效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Qt具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C/C++中宏/Macro的深入講解

    C/C++中宏/Macro的深入講解

    這篇文章主要給大家介紹了關(guān)于C/C++中宏/Macro的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C/C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C語言版三子棋游戲

    C語言版三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言版三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論