標籤:c++ c語言
實用性”增強
C語言中的變數都必須在範圍開始的位置定義!!
C++中更強調語言的“實用性”,所有的變數都可以在需要使用時再定義。
int main(){ inti = 0; printf("ddd"); intk; return0;}
register關鍵字增強
register關鍵字 請求編譯器讓變數a直接放在寄存器裡面,速度快在c語言中 register修飾的變數 不能取地址,但是在c++裡面可以。
1
register關鍵字的變化
register關鍵字請求“編譯器”將局部變數儲存於寄存器中,C語言中無法取得register變數地址。
在C++中依然支援register關鍵字,C++編譯器有自己的最佳化方式,不使用register也可能做最佳化,C++中可以取得register變數的地址。
2
C++編譯器發現程式中需要取register變數的地址時,register對變數的聲明變得無效。
3
早期C語言編譯器不會對代碼進行最佳化,因此register變數是一個很好的補充。
int main(){register int a = 0;printf("&a = %x\n", &a);return 0;}
函數檢測增強
在C語言中,重複定義多個同名的全域變數是合法的。
在C++中,不允許定義多個同名的全域變數。
C語言中多個同名的全域變數最終會被連結到全域資料區的同一個地址空間上。
int g_var;
int g_var = 1;
C++直接拒絕這種二義性的做法。
struct類型加強
C語言的struct定義了一組變數的集合,C編譯器並不認為這是一種新的類型。
C++中的struct是一個新類型的定義聲明。
struct Student{ char name[10]; int age;};int main(int argc, char *argv[]){ Student s1 = {"wan", 1}; Student s2 = {"wan2", 2}; return 0;}
C++中所有的變數和函數都必須有類型
C語言中的預設類型在C++中是不合法的。
總結:
在C語言中
int f( );表示返回值為int,接受任意參數的函數。
int f(void);表示返回值為int的無參函數
在C++中
int f( );和int f(void)具有相同的意義,都表示返回值為int的無參函數
C++更加強調類型,任意的程式元素都必須顯示指明類型
c++對c的增強