C 與C C 之別一

2021-06-26 06:29:06 字數 1060 閱讀 3333

現在為了工作的需要,需要深入學習c#,現記錄c#和c/c++的區別,以方便以後對比和查閱,記錄的資料參照《c#高階程式設計》(第七版)!

內聯

一些開發人員可能會擔心,在上一節中,我們列舉了許多情況,其中標準c#編碼方式導致了大材小用,例如,通過屬性訪問字段,而不是直接訪問字段。這些額外的函式呼叫是否會增加系統開銷,導致效能下降?其實,不需要擔心這種程式設計方式會在c#中帶來效能損失。c#**會編譯為il,然後在執行時jit編譯為本地可執行**。jit編譯器可生成高度優化的**,並在適當的時候隨意地內聯**(即,用內聯**來替代函式呼叫)。如果實現某個方法或屬性僅是呼叫另乙個方法,或返回乙個字段,則該方法或屬性肯定是內聯的。但要注意,在何處內聯**完全由clr決定。我們無法使用像c++中inline這樣的關鍵字來控制哪些方法是內聯的。

靜態建構函式

c#的乙個新特徵是也可以給類編寫無引數的靜態建構函式。這種建構函式只執行一次,而前面的建構函式是例項建構函式,只要建立類的物件,就會執行它。

class myclass

// rest of class definition

}編寫靜態建構函式的乙個原因是,類有一些靜態欄位或屬性,需要在第=次使用類之前,從外部源中初始化這些靜態欄位和屬性。

注意,無引數的例項建構函式與靜態建構函式可以在同乙個類中同時定義。儘管引數列表相同,但這並不矛盾,因為在載入類時執行靜態建構函式,而在建立例項時執行例項建構函式,所以何時執行哪個建構函式不會有衝突。

唯讀字段

常量的概念就是乙個包含不能修改的值的變數,常量是c#與大多數程式語言共有的。但是,常量不必滿足所有的要求。有時可能需要一些變數,其值不應改變,但在執行之前其值是未知的。c#為這種情形提供了另一種型別的變數:唯讀字段。

readonly關鍵字比const靈活得多,允許把乙個字段設定為常量,但還需要執行一些計算,以確定它的初始值。其規則是可以在建構函式中給唯讀字段賦值,但不能在其他地方賦值。唯讀欄位還可以是乙個例項字段,而不是靜態字段,類的每個例項可以有不同的值。與const欄位不同,如果要把唯讀字段設定為靜態,就必須顯式宣告它。

《完美C C 》之C與C 的區別(一)

型別檢查的區別 列舉的區別 左值也可被賦值 1 型別檢查更嚴格 c 型別檢查比c語言更加嚴格 int main 同樣的 在c語法中就能編譯通過,但是在c 中就會報錯。1.1const int a在c 中就必須要初始化,不然就報錯,但是在c語言中就能編譯通過,而且是個隨機值。1.2上列中的 int p...

初學C ,C與C 雜記

從c到c 兩者比較 c 不允許全域性變數重複定義,結構體定義變數,變數名就是一種資料型別不需要struct,函式定義函式時void和不寫形參都表示無形參,且必須包含返回值型別,三目運算子能作左值 即其結果為變數 const定義變數就是常量,存在符號表中,類似於c裡面的define,但其僅僅為區域性變...

C C 基礎 一 C 入門

先用c 來寫乙個helloworld的程式 include 預編譯指令 using namespace std 編譯指令 int main 函式頭 現在以第乙個c 程式引出一些最最最基本的概念。c 有兩種注釋形式 include語句是預處理指令。在c 中,使用乙個預處理器,該程式在進行主編譯之前,對...