C++11常用文法- explicit類型轉換運算子的具體用法

來源:互聯網
上載者:User
為了想explicit類型轉換運算子和C++Primer書中不同的地方,且提供更加有意義的例子,作者花費了不少心思,請大家務必認真理解。

類型轉換運算子

看下面的例子:

這時一個複數類的雛形,定義了一個double類型的類型轉換運算子。有了它以後,可以像下面這樣使用:

輸出結果如下:

complex不支援輸出運算子,所以編譯器努力將c1轉換成double類型以後輸出。到目前為止都挺好。

真的是想轉換成double?

再看下面的代碼:

如果從數學的角度來講,應該輸出2.23606。但實際上,這段代碼連編譯都通不過。其原因是對於這段代碼編譯器有兩種選擇:一個是將c1轉換稱double然後加1;另一個是將1轉換為複數(1+0i)以後執行複數加法。

需要程式員給個想法。

顯式的類型轉換運算子

為了消除二義性,一個辦法就是使用explicit禁止隱式的double類型轉換。代碼如下:

由於無法進行隱式類型轉換,所以下面的代碼會出現編譯錯誤:

這並不是什麼大問題,因為轉換為double輸出這件事本身對不對都不好講。代碼中已經通過輸出運算子多載提供了複數形式的輸出功能。

輸出如下:

這才是我們真正想要的!

補充一點

如果願意的話,也可以這樣編碼:

覺得本文有協助?請分享給更多人。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.