2009年10月6日 星期二

C++關鍵字:explicit

在程式設計中我們常常會遇到型別轉換的問題,如果是基礎型別的轉換,
例如:int -> double這些編譯器會自動幫我們處理,當然有時候會有資料遺失的可能,
例如: double -> int.但是如果是自訂的資料型別,編譯器要怎麼處理型別轉換的問題?

其實我們可以利用建構函數幫我們做這件事情,例如
Stonewt型別 代表一個重量值
如果該型別的建構函數為 Stonewt(double lbs);
則我們可以作以下的運算:

Stonewt mycar;
mycar = 893.5;

但是這樣又會遇到另外一個問題,這樣的轉換不是我們預期的話,有沒有辦法可以讓編譯器不要幫我們處理這樣的轉換?

所以在c++使用了一個關鍵字 explicit
所以當遇到我們不想讓編譯器自作聰明的時候可以這樣宣告建構函數

explicit Stonewt(double lbs);

這樣之前那個例子mycar = 893.5編譯器就會跟你說這樣的運算是有問題的囉!
這樣也可以避免掉一些意外的轉換

沒有留言: