C 體會一下什麼叫做強型別

2021-09-05 16:44:21 字數 830 閱讀 6304

首先宣告,這篇文章僅僅是個人的學習體會,並不是標準資料。如果有什麼謬誤,歡迎高手指出。

object o1 = new object();

string s1 = o1.tostring();    // s1 will be "system.object"

object o2 = "hello";

string s2 = o2.tostring();    // s2 will be "hello"

這和c++很不相同。在c++裡面,o2.tostring()會呼叫object的tostring()方法,而不是string的tostring()方法。o2是對靜態string物件"hello"的乙個引用,則o2雖然在語法上寫成了object型別,但它代表的是在記憶體裡的乙個string物件。當程式試圖通過o2來呼叫tostring()方法的時候,系統首先要在記憶體裡面找到o2所代表的物件,然後在這個物件的函式表中找到合適的方法來執行。o2代表的是乙個string物件,而string型別已經過載過tostring()方法,在o2所代表的string物件的函式表裡立刻就找到了tostring()方法,因此string型別的tostring()方法就被呼叫了。

這就是基於執行時的強型別。

具體到實現上的區別:

c++被編譯成彙編,呼叫是 jmp [address in memory],直接跳轉。

c#被編譯成il,呼叫是callvirt classname.functionname,需要經過runtime的翻譯。雖然最終也是要jmp到某個位址去執行的,但是跳轉的這個位址,卻是由runtime在執行的時候根據classname.functionname和classinstance address計算出來的。

總結一下最近的體會

最近的狀態 一直處於看 的狀態,效率不高,之前一直在看細節,然後細節看過之後,感覺應該對流程應該有個體會,所以就去看流程而沒有過多的關注細節,其實應該是先看細節,然後再看流程,兩者結合一下,效果會更好 有了改變的意識 感覺很沒勁,感覺學不多東西,感覺很無聊 聽培訓,聽完之後,老人點評,這時候才開始明...

總結一下C 型別轉換

簡短版參考 我們知道c語言中的型別轉換只有一種 type b type a 而在c 語言中新增了四個關鍵字static cast const cast reinterpret cast和dynamic cast。1.static cast double bv 100.0 int i int bv c...

小記一下 C

bool cmydlg oninitdialog cdialog oninitdialog afxmessagebox 測試init 初始化視窗時出現 int screen width,screen height 以下四行 實現視窗的全屏顯示 screen width getsystemmetric...