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

《C++ Primer》隱式類類型轉換學習整理

 更新時間:2020年02月25日 09:35:22   作者:honpey  
在本篇文章里小編給大家整理的是關于《C++ Primer》隱式類類型轉換學習筆記內容,需要的朋友們參考下。

C++ Primer中有這樣一句話:可以用單個實參來調用的構造函數(shù)定義了從形參類型到該類類型的一個轉換。這句話用下面一段代碼表示為:

class A
{
  A(B b);//單個實參的構造函數(shù)
  func(A a);
} 
.....
A a;
B b;
a.func(b);//func函數(shù)本應該接受A類型的實參,但是由于特殊構造函數(shù)的存在,所以B類型的參數(shù)b借助這個特殊的構造函數(shù)轉化為A類型對象,完成轉換。所以這條語句是正確的

從上述代碼段可以看出來,單個實參調用的構造函數(shù)定義了類類型到其他類型的轉換,并且這種轉換是隱式發(fā)生的,這里有幾個關鍵字:單個實參,構造函數(shù),隱式轉換。

隱式轉換的過程發(fā)生了什么?對象a并沒有參數(shù)類型為B的成員函數(shù),但是它有一個單一B類形參的構造函數(shù),所以編譯時是不會報錯的。對于a.func(b)這條語句,編譯器會用這個特殊的構造函數(shù),生成一個臨時對象,然后以臨時對象調用正規(guī)的 func(A a)函數(shù),func(A a)函數(shù)結束,臨時對象被注銷。

這種轉換到底好不好?因類而異,因使用的語境而異!你總有需要它的時候,也有不許要它的時候,語言默認是有這項功能的。但是,也可以通過關鍵字explicit阻止這種我們看不到的“優(yōu)化”!explicit關鍵字只能用在構造函數(shù)身上,并且只需在函數(shù)的聲明時標注即可,在類函數(shù)的定義時不需標注該關鍵字。

上例中如果阻止借助構造函數(shù)A(B b)發(fā)生隱式類型轉換,可對該構造函數(shù)的聲明做如下處理:

explicit A (B b)

此時語句a.func(b)就要出錯了,但是我們可以顯式地使用構造函數(shù),以上例為例,可以使用語句

a.func(A(b))

完成相同的功能,此時不涉及隱式轉換。A(b)生成臨時A類型對象,并且傳遞給函數(shù)func調用,一切循規(guī)蹈矩,沒有任何隱式的、程序員看不見的步驟。顯示的構造函數(shù)中止了隱式地使用構造函數(shù),任何構造函數(shù)都可以顯式地創(chuàng)建臨時對象,這是它的權利,被explicit修飾的構造函數(shù)也不例外。

對于隱式類類型轉換,《C++ Primer》作者有如下心得:通常,除非有明顯理由要定義隱式轉換,否則,單形參構造函數(shù)應該為explicit。將構造函數(shù)設置為explicit可以避免錯誤,并且當轉換有用時,用戶可以顯式地構造對象。

到此這篇關于《C++ Primer》隱式類類型轉換學習整理的文章就介紹到這了,更多相關c++隱式類類型轉換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

双城市| 淅川县| 江源县| 衡南县| 饶平县| 崇礼县| 鄂托克旗| 堆龙德庆县| 德庆县| 探索| 耿马| 诏安县| 柘荣县| 彰武县| 惠安县| 承德市| 且末县| 兰州市| 吴堡县| 横山县| 新蔡县| 洛浦县| 扶风县| 汶上县| 濉溪县| 清新县| 赤壁市| 开化县| 来凤县| 灵山县| 麻栗坡县| 金阳县| 沁源县| 龙泉市| 无棣县| 伊吾县| 玉林市| 北流市| 安岳县| 蒲城县| 凤山市|