c 對c的加強

2022-05-14 12:09:52 字數 1734 閱讀 7863

1.register關鍵字的加強

register修飾符暗示編譯程式相應的變數將被頻繁地使用,如果可能的話,應將其儲存在cpu的暫存器中,以加快其儲存速度,這只是一種請求,編譯器可以拒絕這種申請。

(1)register變數必須是能被cpu所接受的型別。

這通常意味著register變數必須是乙個單個的值,並且長度應該小於或者等於整型的長度。不過,有些機器的暫存器也能存放浮點數。暫存器的位數通常和cpu的位數一致。現在32bit和64bit的cpu居多。

(2)因為register變數可能不存放在記憶體中,所以不能用「&」來獲取register變數的位址(c++中可以取位址)。

(3)只有區域性自動變數和形式引數可以作為暫存器變數,其它(如全域性變數)不行。

在呼叫乙個函式時占用一些暫存器以存放暫存器變數的值,函式呼叫結束後釋放暫存器。此後,在呼叫另外乙個函式時又可以利用這些暫存器來存放該函式的暫存器變數。

(4)區域性靜態變數不能定義為暫存器變數。不能寫成:register static int a;

(5)由於暫存器的數量有限(不同的cpu暫存器數目不一),不能定義任意多個暫存器變數,而且某些暫存器只能接受特定型別的資料(如指標和浮點數),因此真正起作用的register修飾符的數目和型別都依賴於執行程式的機器,而任何多餘的register修飾符都將被編譯程式所忽略。尤其現代編譯器更加智慧型了,一般情況下不需要我們主動使用暫存器變數。

為什麼c++可以對暫存器變數取位址呢?

c++編譯器在遇到對暫存器變數取位址的時候,會忽略你的register請求。

2.變數檢測加強

全域性變數:

int a;

int a=1;

c語言中可以編譯通過(而且沒有任何警告),c++中是不允許的。c語言中只有當同名全域性變數都賦予初始值時,才會報錯,例如:

int a=1;

int a=1;

所以,c++中對變數檢測更為嚴格了。

3.const的加強

在之前的隨筆中已經說過了,c語言的const不是常量,c++中的是常量。c++中,const修飾的變數放在符號表中,哪怕指標強制型別轉換,也不能更改const修飾的變數的值,這已經是真正的常量了。

4.三目運算子的加強

c語言中三目運算子表示式不能作為左值,但是c++中是可以的。

5.struct關鍵字的加強

這就自然不用多說了,類是c++的特色之一,這個就不多說了。做個測試,說明c++的struct和c語言的struct定義「結構」時的不同。

6.對函式返回值和引數檢測加強

c語言有一些歷史遺留問題,函式可以不帶返回值,引數還可以不宣告型別,但是在c++中是不允許的,c語言中我們也應該規避掉那樣的寫法。

c語言函式形參不寫,代表一切,c++中函式形參不寫,代表void。

C 對C的加強

c 是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c 擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c 就適應的問題規模而論,大小由之。c 不僅擁有計算機高效執行的實用性特徵,...

C 對C的加強

c 是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c 擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c 就適應的問題規模而論,大小由之。c 不僅擁有計算機高效執行的實用性特徵,...

c 對c的加強(一)

最好定義在標頭檔案中 使用命名空間的目的 防止變數名 函式名 類名發生衝突,限制變數的作用域 命名空間的定義 namespace one 命名空間的使用 命名空間名 變數名或者函式名 one num 命名空間可以巢狀使用 namespace one namespace one1 std cout 標...