引言:本文意在完成一場從c到c++世界的平滑過渡,因此要求讀者應具備一定的c語言基礎功底。
文章嚮導一、c與c++的關係c與c++的關係並不能簡單地概括為僅多了兩個+號而已,兩者實際上既有區別又有聯絡,且並無所謂的何者好壞之說。簡單說來,c++其實是一種更好的c語言,只不過兩者適用場景並不相同。
由上圖可知,c++繼承了c的所有特性,也就是完全地相容c語言。同時,c++在c的基礎上提供了更多的語法和特性(++的由來:型別加強、函式加強)。c++所要達到的目標是執行效率與開發效率的同一。
二、c++做了哪些公升級?
1.更為強調語言的實用性
int c = 0;
for(int i=1; i<=numoftask; i++)
}printf("c = %d\n", c);
register
int a = 0; //在c中,此處會報錯
printf("&a = %p\n", &a); //在c中,此處會報錯
printf("end...\n");
return
0;}
3.struct關鍵字的加強
/*c語言中的結構體書寫*/
typedef
struct _tag_student student;
struct _tag_student
;/*c++中的結構體書寫*/
struct student
上面展示的為c與c++中的結構體等價寫法,可明顯發現兩者的區別:-c語言中struct定義的識別符號並不是一種新的型別,而c++中的struct卻用於定義一種全新的型別。
4.隱式宣告與函式引數
首先,應該明確的是c++中所有的識別符號都必須顯示宣告型別,即在c++中不應該寫出如下的**:
f()
上面的函式f()在c語言中表示預設返回值為int,且可接收任意多的引數,但在c++中這樣寫是沒法通過編譯的。另外,值得注意的是c++中 int f()和int f(void)具有相同的意義。
5.const關鍵字的公升級
上圖對比了const關鍵字在c語言與c++中的異同之處,為了更好的理解圖中的結論,請看如下兩個示例。
/*test.c*/
#include
int main()
/*test.cpp*/
#include
int main()
這裡主要分析第二個例子,也就是c++中的情形。首先看下完整的執行結果:
從圖中可以明確看到編譯器給const常量c分配了儲存空間,但卻並未使用其儲存空間中的值。要理解這點則需明白之前提及的「符號表(編譯器的一種資料結構)」,c++中定義的const常量,編譯器會將其存入符號表中,當要使用常量時則直接從符號表中取值進行替換,但為了相容c語言可能會為其分配儲存空間,但卻不會使用其中的值。有點繞?那不妨看看下面這張草圖:
notes:實際上還有其他的公升級方面,但這會牽涉到c++獨有的知識點,因此筆者想將其放在後續的內容中來論述。
參閱資料c++ primer plus(第6版)
狄泰軟體學院-c++深度解析教程
從C到C 的公升級
c 的語言型別 c 是靜態的強型別語言。靜態語言 資料型別在編譯期間檢查,因此在寫程式時需要宣告變數的型別 強型別語言 強調資料型別,不同的資料型別間的轉換需要進行強制型別轉換 1.c 繼承所有c的特性 2.c 在c的基礎上提供的更多的語法和特性 型別加強,函式加強,異常處理 3.c 在c的基礎上增...
C到C 的公升級
c與c 的關係 1.c 繼承了所有的c特性 2.c 在c的基礎上提供了更多的語法和特性 3.c 的設計目標是執行效率與開發效率的統一 c 對c的加強 1.c 中更強調語言的 實用性 所有的變數都可以在需要使用的時候再定義 for int i 0 i 10 i c 編譯器不報錯 注意 c語言中的變數都...
c到c 的公升級
c 繼承了c的所有特性,c 在c的基礎上同時增加了許多新的語法和特性,c 的目標是實現執行效率與開發效率相統一。c 中更加強調語言的實用性,所有變數可在使用的時候再定義。例如 include int main int argc,char argv printf c d n c printf end....