亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++11顯示類型轉換有哪些優點

發布時間:2020-08-13 16:04:19 來源:億速云 閱讀:195 作者:小新 欄目:開發技術

這篇文章主要介紹C++11顯示類型轉換有哪些優點,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1.隱式類型轉換的問題

隱式類型轉換是C++一個讓人又愛又恨的特性,使用方便,但可能會降低代碼可讀性,甚至會造成一些十分隱晦的錯誤。

#include <iostream>
using namespace std;

class MyInt
{
public:
	//單參構造函數
	explicit MyInt(int value) :_value(value)
	{}

	//類型轉換操作符
	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對象相加的結果并不是我們期望的數值3,而是1,導致這種隱晦錯誤的原因是在兩個MyInt對象相加后,結果對象myInt1被隱式地轉換為bool類型,導致輸出數值為1。隨著項目代碼規模變大,這種由隱式類型轉換導致的隱晦錯誤會越埋越深,越來越難以發現。

2.顯示類型轉換

為了阻止容易導致隱晦錯誤的隱式類型轉換,C++11引入了explicit關鍵字作用于自定義的類型轉換操作符的功能,禁止隱式類型轉換。其用法類似于explicit作用于單參構造函數來避免單參數構造函數被隱式調用造成的隱式類型轉換。

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

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

當使用explicit關鍵字修飾bool類型轉換操作符時,隱式類型轉換將會被阻止,進而引起上面的編譯錯誤,將潛在的隱晦錯誤暴露于編譯階段,讓錯誤得以提前發現,提前解決。

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

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

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

以上是C++11顯示類型轉換有哪些優點的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安顺市| 阳山县| 遂川县| 曲水县| 武义县| 横峰县| 汶川县| 南华县| 麻城市| 莱州市| 铁岭市| 如皋市| 宣威市| 偃师市| 裕民县| 从化市| 华池县| 盘山县| 普宁市| 定日县| 密山市| 蒙阴县| 苍梧县| 迭部县| 天气| 凤台县| 福海县| 依兰县| 济阳县| 湛江市| 邓州市| 松滋市| 临桂县| 柳江县| 泗水县| 铜山县| 古交市| 金阳县| 栾川县| 曲周县| 汝城县|