c++對c的加強

來源:互聯網
上載者:User

標籤:等於   變數   請求   const   參數   nbsp   三目運算子   而且   接受   

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++:

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

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

2.變數檢測加強

全域變數:

int a;

int a=1;

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

int a=1;

int a=1;

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

3.const的加強

在之前的隨筆中已經說過了,C語言的const不是常量,c++中的是常量。

4.三目運算子的加強

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

5.struct關鍵字的加強

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

 

 

6.對函數傳回值和參數檢測加強

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

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

c++對c的加強

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.