天天看點

C++ 和 C語言的差別

差別總結

1、差別1

變量的定義

c++中更強調語言的“實用性”,所有的變量都可以在需要使用時再定義。

差別:c語言中的變量都必須在作用域開始的位置定義!!

2、差別2

register關鍵字的變化

register關鍵字請求“編譯器”将局部變量存儲于寄存器中

c語言中無法取得register變量位址

在c++中依然支援register關鍵字

c++編譯器有自己的優化方式,不使用register也可能做優化

c++中可以取得register變量的位址

c++編譯器發現程式中需要取register變量的位址時,register對變量的聲明變得無效。,c++的編譯器中做的優化比我們程式員要的多多的。如果,有人對register

變量取址,那麼編譯器就會視為普通變量,本來可能視為register變量了。

早期c語言編譯器不會對代碼進行優化,是以register變量是一個很好的補充。

3、差別三

在c語言中,重複定義多個同名的全局變量是合法的,嚴重影響可讀性

在c++中,不允許定義多個同名的全局變量

c語言中多個同名的全局變量最終會被連結到全局資料區的同一個位址空間上。但c++直接拒絕這種二義性的做法。

4差別四

c++語言的const的優化。

c語言中的const變量

c語言中const變量是隻讀變量,有自己的存儲空間,可以通過指針對其進行修改,

c++中的const是常量,隻有在取址的時候,或者發現extern,才去配置設定空間,const變量在符号表中作為常量存儲,當再次通路時時,由于優化的原因會直接從符号表裡面通路他的值,并不會因為指針改變了他的空間的值而使值改變

既然值不用,為什麼需要這一文法,可以通過記憶體改變值呢?

為了相容c語言,

intarray[a+b]={0};//在c語言中,a,b作為變量,是以a+b在編譯的時候是無法知道其大小的,隻用在運作時才可以通路得到,而在c++中,const修飾的表示是常量,從符号表中讀取,

const和#define的差別

const有嚴格的類型檢查,和作用域的檢查,而#define沒有作用域的檢查和類型的檢查,它隻是簡單的文本替換。

c++中的const常量類似于宏定義

constintc=5;≈#definec5

c++中的const常量在與宏定義不同

const常量是由編譯器處理的,提供類型檢查和作用域檢查

宏定義由預處理器處理,單純的文本替換

差別五:

struct類型的加強:

c語言的struct定義了一組變量的集合,c編譯器并不認為這是一種新的類型

c++中的struct是一個新類型的定義聲明

差別六:

c語言中預設為×××,且函數無參時表示可以接受任一個參數(注但是不可以通路到仍和一個)

c++中所有的變量和函數都必須有類型

c語言中的預設類型在c++中是不合法的

在c語言中

intf();表示傳回值為int,接受任意參數的函數

intf(void);表示傳回值為int的無參函數

在c++中

intf();和intf(void)具有相同的意義,都表示傳回值為int的無參函數

總結:

c++以c語言為基礎進行了加強

c++更強調實用性,可以在任意的地方聲明變量

c++中的register隻是一個向後相容的作用,c++編譯器能夠進行更好的變量優化

c++中的const是一個真正意義上的常量,而不是隻讀變量

c++更加強調類型,任意的程式元素都必須顯示指明類型

繼續閱讀