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

C++11顯示類型轉(zhuǎn)換的優(yōu)點

 更新時間:2020年08月12日 09:52:39   作者:Dabelv  
這篇文章主要介紹了C++11顯示類型轉(zhuǎn)換的優(yōu)點,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下

1.隱式類型轉(zhuǎn)換的問題

隱式類型轉(zhuǎn)換是C++一個讓人又愛又恨的特性,使用方便,但可能會降低代碼可讀性,甚至?xí)斐梢恍┦蛛[晦的錯誤。

#include <iostream>
using namespace std;

class MyInt
{
public:
	//單參構(gòu)造函數(shù)
	explicit MyInt(int value) :_value(value)
	{}

	//類型轉(zhuǎn)換操作符
	operator bool() const noexcept
	{
		return _value != 0;
	}

	//加運算符重載
	MyInt& operator+(const MyInt& right)
	{
		_value += right.getValue();
		return *this;
	}

	int getValue() const
	{
		return _value;
	}
private:
	int _value;
};

int main()
{
	MyInt myInt1(1);
	MyInt myInt2(2);
	cout << "myInt1+myInt2=" << myInt1 + myInt2 << endl;
	return 0;
} 

程序編譯運行輸出:

myInt1+myInt2=1

雖然程序編譯運行沒有什么問題,但是兩個MyInt對象相加的結(jié)果并不是我們期望的數(shù)值3,而是1,導(dǎo)致這種隱晦錯誤的原因是在兩個MyInt對象相加后,結(jié)果對象myInt1被隱式地轉(zhuǎn)換為bool類型,導(dǎo)致輸出數(shù)值為1。隨著項目代碼規(guī)模變大,這種由隱式類型轉(zhuǎn)換導(dǎo)致的隱晦錯誤會越埋越深,越來越難以發(fā)現(xiàn)。

2.顯示類型轉(zhuǎn)換

為了阻止容易導(dǎo)致隱晦錯誤的隱式類型轉(zhuǎn)換,C++11引入了explicit關(guān)鍵字作用于自定義的類型轉(zhuǎn)換操作符的功能,禁止隱式類型轉(zhuǎn)換。其用法類似于explicit作用于單參構(gòu)造函數(shù)來避免單參數(shù)構(gòu)造函數(shù)被隱式調(diào)用造成的隱式類型轉(zhuǎn)換。

//類型轉(zhuǎn)換操作符
explicit operator bool() const noexcept
{
	return _value != 0;
}

cout << "myInt1+myInt2=" << myInt1 + myInt2 << endl;		//編譯出錯

當(dāng)使用explicit關(guān)鍵字修飾bool類型轉(zhuǎn)換操作符時,隱式類型轉(zhuǎn)換將會被阻止,進(jìn)而引起上面的編譯錯誤,將潛在的隱晦錯誤暴露于編譯階段,讓錯誤得以提前發(fā)現(xiàn),提前解決。

注意,顯式類型轉(zhuǎn)換有一個例外。如果表達(dá)式被用作條件,僅限轉(zhuǎn)換到bool,那么顯式的operator bool()也可以隱式地進(jìn)行。“被用作條件”指出現(xiàn)在以下語句:

 (1)if、while及do語句的條件部分;
 (2)for語句頭的條件表達(dá)式;
 (3)邏輯非運算符(!)、邏輯或運算符(||)、邏輯與運算符(&&)的運算對象;
 (4)條件運算符(x ? y : z)的條件表達(dá)式。

由于轉(zhuǎn)換到bool一般被用作條件,所以operator bool()一般用explicit來修飾。

以上就是C++11顯示類型轉(zhuǎn)換的優(yōu)點的詳細(xì)內(nèi)容,更多關(guān)于C++11顯示類型轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C語言實現(xiàn)學(xué)生打卡系統(tǒng)

    C語言實現(xiàn)學(xué)生打卡系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)學(xué)生打卡系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++ CryptoPP使用AES實現(xiàn)加解密詳解

    C++ CryptoPP使用AES實現(xiàn)加解密詳解

    Crypto++ (CryptoPP) 是一個用于密碼學(xué)和加密的 C++ 庫,提供了大量的密碼學(xué)算法和功能,這篇文章主要為大家介紹了C++ CryptoPP如何使用AES實現(xiàn)加解密,需要的可以參考下
    2023-11-11
  • 使用C語言實現(xiàn)字符串逆序操作案例

    使用C語言實現(xiàn)字符串逆序操作案例

    這篇文章主要介紹了使用C語言實現(xiàn)字符串逆序操作案例,本文包含使用C語言的兩種方法去實現(xiàn),遞歸和非遞歸,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Windows安裝Qt6.4.2及簡單驗證

    Windows安裝Qt6.4.2及簡單驗證

    本文主要介紹了Windows安裝Qt6.4.2及簡單驗證,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C++中的類模板詳解及示例

    C++中的類模板詳解及示例

    我們在定義函數(shù)時,可以通過定義函數(shù)模板,來簡化一些功能相同而數(shù)據(jù)類型不同的函數(shù)的定義和調(diào)用過程
    2013-10-10
  • 解決C++ openCV無法讀取視頻但是可以讀取圖像的問題記錄

    解決C++ openCV無法讀取視頻但是可以讀取圖像的問題記錄

    在使用OpenCV的cv::VideoCapture讀取視頻文件時,可能會遇到無法讀取特定格式,如MP4的視頻文件的問題,本文介紹解決C++ openCV無法讀取視頻但是可以讀取圖像的問題記錄,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • C++使用tinyxml庫處理XML文件

    C++使用tinyxml庫處理XML文件

    TinyXML是一個開源的解析XML的解析庫,能夠用于C++,能夠在Windows或Linux中編譯,這個解析庫的模型通過解析XML文件,然后在內(nèi)存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹,本文為大家介紹的是使用tinyxml庫處理XML文件,需要的可以參考一下
    2023-07-07
  • C++?Boost?Assign超詳細(xì)講解

    C++?Boost?Assign超詳細(xì)講解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-12-12
  • C語言中的sscanf()函數(shù)使用詳解

    C語言中的sscanf()函數(shù)使用詳解

    這篇文章主要介紹了C語言中的sscanf()函數(shù)使用詳解,文中附加了一道相關(guān)的ACM題目進(jìn)行補充鞏固,需要的朋友可以參考下
    2015-08-08
  • 詳解C語言中sizeof如何在自定義函數(shù)中正常工作

    詳解C語言中sizeof如何在自定義函數(shù)中正常工作

    在main函數(shù)中,sizeof是可以正常工作的,但是在自定義函數(shù)中就不可以了。所以本文將為大家詳細(xì)講解一下如何解決這一問題,感興趣的可以了解一下
    2022-05-05

最新評論

乌拉特中旗| 阳曲县| 新沂市| 锦州市| 常德市| 黄龙县| 黄骅市| 杭州市| 娄底市| 乌鲁木齐市| 泸州市| 石棉县| 马尔康县| 喀什市| 棋牌| 鄂伦春自治旗| 堆龙德庆县| 麻城市| 清丰县| 寻乌县| 亳州市| 盐山县| 开封市| 瓦房店市| 翁牛特旗| 银川市| 东乡族自治县| 万全县| 石渠县| 蕉岭县| 屯留县| 大丰市| 衡阳市| 吉木乃县| 西华县| 广汉市| 裕民县| 随州市| 武功县| 清徐县| 博湖县|