第2課 C到C++的升級

來源:互聯網
上載者:User

標籤:com   變數   style   進階   面向   gcc   def   關係   資料   

  C與C++的關係:

 

C++在C語言的基礎上進行的升級最重要的是兩個方面:

  1、類型的加強,C++更稱得上是進階語言,C++語言對於類型的檢查更嚴格

  2、物件導向的支援,天生支援物件導向軟體開發方法學

C++語言是C語言的進化。

C++語言更強調語言的實用性,有一些文法方面的加強

  所有變數都可以在需要使用時再定義

 

而C語言中的變數必須在範圍開始的位置定義(老的C語言版本)

register關鍵字:

 

  register關鍵字在C語言中很雞肋,編譯器發展到後期,最佳化能力很強。C++雖然依舊支援register,這僅僅是為了相容C語言。C++有自己的最佳化方式,基本不看是否存在regster關鍵字。register在C++中形同虛設。

  C++中的register關鍵字:

 

  

在C語言中,重複定義多個同名的全域變數是合法的

在C++中,不允許定義多個同名的全域變數,C++直接拒絕這種二義性的做法

C語言中的多個同名的全域變數最終會被連結到全域資料區的同一個地址空間上

樣本程式:

 

上述的程式變數c不是在main函數的起始範圍處定義的,for迴圈中也定義了i,這在C語言是不合法的,會報錯。int型的register變數a,在C++中register會被編譯器忽略。

C++如果定義兩個相同的全域變數會直接報錯:

用gcc編譯器編譯會得到如下錯誤:

struct關鍵字的加強:

  C語言中的struct定義了一組變數的集合

  C語言中的struct定義的標識符並不是一種新的類型

  C++中的struct用於定義一個全新的類型

  C++中進行了類型的加強,非常注重類型,C++中把struct關鍵字當成是一個定義新類型的關鍵字,只要struct出現了,C++就認為產生了一種全新的類型。C語言中定義新類型必須要用typedef。

   上面的等價定義中,左邊的在C語言中,編譯器認為struct定義了一種變數的集合,並且這個變數的集合有一個名字叫做_tag_student,它並不是一種新的類型,如果要將它當做類型來使用,必須要用typedef關鍵字來定義一個類型名。而在右邊的定義中,C++編譯器認為struct定義了一種Student新類型。

面試中的小問題:

 

標識符:C語言中的預設類型是int,函數在定義時如果沒有給出參數或者傳回值,則預設為int,也就是中i預設為int,f的傳回值也預設為int。g的傳回值也預設為int,g預設接受任意參數。

 

  這種預設類型在當代的軟體開發中是絕對不允許支援的,因為會引入二義性。因此,C++對這種預設類型進行了升級,使得int f() 和 int f(void)具有相同的意義。並且int f(void)這種寫法是為了相容C語言。

  

 

第2課 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.