對C 中的型別轉換的再認識

2021-06-26 23:50:14 字數 689 閱讀 8698

今天在看c++書的時候,讀到了用類的建構函式進行型別轉換的知識,我看了這個標題之後,就引起了我的好奇心,建構函式怎麼能進行型別轉換呢?之前學的基本資料型別的轉換(包括隱性型別轉換和顯性型別轉換),比如double(3),就是把原是int型的3強制轉換成double型的資料。那麼這個建構函式又是怎麼進行型別轉換的呢?帶著好奇心的我便讀了起來。

到最後我總結了一下,千言萬語匯聚成了一句話:型別轉換的結果就是產生了臨時物件。

這還要從臨時物件說起。

書上先講了臨時物件。大家想一下複製建構函式的知識,當返回型別是類型別的時候,在執行return語句時,就要呼叫複製建構函式,這時會隱含產生乙個臨時物件來存放返回值的值,這個語句執行完後,臨時物件就消失了。既然能隱含產生,那就能顯式產生,方法是用類去呼叫它的建構函式,如下所示:給了乙個例子(產生臨時物件):cout<。然後對比一下上邊給出的例子,是不是很相似呢?是的,這其實就是類型別的顯式型別轉換,模擬基本資料型別的型別轉換,上個例子也可寫成一下的形式:cout<(1),static_cast(4))《到此就把型別轉換和臨時物件聯絡起來了,這也就得出了結論:型別轉換的結果就是產生了臨時物件。

我仔細想了想這句話,這句話不僅適合於類型別的轉換,而且也適合於以前學的基本資料型別轉換,只不過基本資料型別沒有物件這個概念,但這裡的物件不正可以模擬於基本資料型別的變數嗎?所以說這句話對於基本資料型別轉換也是適合的。

這就是我對型別轉換的再次認識。

對C 中Readonly的再認識

很多人知道readonly 和 const 以及他們的區別和聯絡,本文只要對readonly 的乙個小特性進行記錄,屬於讀書筆記吧 請看如下 public sealed class atype 這句 很簡單 我只是對靜態唯讀欄位testchars賦初始值。這時候如果我問你我現在可以改變testcha...

對C 中Readonly的再認識

很多人知道readonly 和 const 以及他們的區別和聯絡,本文只要對readonly 的乙個小特性進行記錄,屬於讀書筆記吧 請看如下 public sealed class atype 這句 很簡單 我只是對靜態唯讀欄位testchars賦初始值。這時候如果我問你我現在可以改變testcha...

對Integer的再認識

為了節省記憶體,對於下列包裝物件的兩個例項,當它們的基本值相同時,他們總是 boolean byte character,u0000 u007f 7f是十進位制的127 integer,128 127 jdk6 api valueof public static integer valueof in...