為了想explicit型轉換運算子和C Primer書中不同的地方,且提供更有意義的例子,作者花了不少心思,請大家務必認真理解。
型別轉換運算子
看下面的範例:
這時一個複數類別的雛形,定義了一個double類型的型別轉換運算子。有了它以後,可以像下面這樣使用:
輸出結果如下:
## complex不支援輸出運算符,所以編譯器努力將c1轉換成double類型以後輸出。到目前為止都挺好。真的是想轉換成double?
再看下面的程式碼: 如果從數學的角度來講,應該輸出2.23606。但實際上,這段程式碼連編譯都通不過。原因是對於這段程式碼編譯器有兩種選擇:一個是將c1轉換稱double然後加1;另一個是將1轉換為複數(1 0i)以後執行複數加法。 需要程式設計師給個想法。明確的型別轉換運算子
為了消除二義性,一個辦法就是用explicit禁止隱式的double型別轉換。程式碼如下: 由於無法進行隱含型別轉換,所以下面的程式碼會出現編譯錯誤:這並不是什麼大問題,因為轉換為double輸出這件事本身對不對都不好講。程式碼中已經透過輸出運算子重載提供了複數形式的輸出功能。 輸出如下: 這才是我們真正想要的!
補充一點
如果願意的話,也可以這樣編碼:##覺得這篇文章有幫助?請分享給更多人。
相關推薦:
HTML 運算子、類型轉換C# 自訂implicit和explicit轉換#C 語言教學#以上是C++11常用語法- explicit型別轉換運算子的具體用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!