一。C與C++的關係函數
1.C++繼承了C語言的全部特性優化
2.C++在C的基礎上提供了更多的語法和特性spa
3.C++的設計目標是運行效率與開發效率的統一設計
C -> C語言code
+ -> 面向對象支持對象
+ ->類型增強,函數增強blog
二。C++中更強調語言的「實用性」,全部的變量均可以在須要使用時在定義。繼承
在C語言中,重複定義多個同名的全局變量是合法的。作用域
在C++中,不容許定義多個同名的全局變量開發
C語言中多個同名的全局變量最終會被鏈接到全局數據區的同一地址空間上
C++直接拒絕這種二義性的作法。
三。C++對C語言的增強
1. C++編譯器對 const 常量的處理
a .當遇到常量聲明時在符號表中放入常量。
b。編譯過程當中若發現使用常量則直接以符號表中的值替換。
c。編譯過程當中若發現對const使用了extern或者&操做符,則給對應的常量分配存儲空間。
C語言中的const常量是隻讀常量,有本身的存儲空間。
C++中的const常量
可能分配存儲空間。
#當const常量爲全局,而且須要在其餘文件中使用
#當使用&操做符取const常量的地址
#include <stdio.h> int main(int argc, char *argv[]) { const int c = 0; int* p = (int*)&c; printf("Begin...\n"); *p = 5; printf("c = %d\n", c); printf("End...\n"); printf("Press enter to continue ..."); getchar(); return 0; }
輸出的是 C = 0;
2.C++中的const小結
a、C++中的const常量相似於宏定義
const int c = 5; 約等於 #define c 5
b.C++中的const常量與宏定義不一樣
const常量由編譯器處理的,提供類型檢查和做用域檢查。
宏定義由預處理器處理,單純的文本替換。
#include <stdio.h> void f() { #define a 3 const int b = 4; } void g() { printf("a = %d\n", a); //printf("b = %d\n", b); } int main(int argc, char *argv[]) { f(); g(); printf("Press enter to continue ..."); getchar(); return 0; }
輸出: a = 3;b 報錯。
3. struct 類型的增強
a、C語言的struct定義了一組變量的集合,C編譯器並不認爲這是一種新的類型
b、C++中的struct是一個新類型的定義聲明。
struct Student
(
const char* name;
int age;
)
Student s1;
Student s2;
4.register 關鍵字的變化
a。register關鍵字請求「編譯器」將局部變量存儲到寄存器中
C語言中沒法取得register變量地址
b。在C++中依然支持register關鍵字
#C++編譯器有本身的優化方式,不使用register也可能進行作優化
#C++中能夠取得register變量的地址
C++編譯器發現程序中須要取register變量的地址時,register對變量的聲明變得無效(由於C++編譯器自動會對變量優化)。
早期C語言編譯器不會對代碼進行優化,所以register變量是一個很好的補充。
5. C++中全部的變量和函數都必須C有類型
a.C語言中的默認類型在C++中是不合法的
f(i)
{
printf("i = %d\n",i);
}
g()
{
return 5;
}
b.C語言中的函數裏面爲無參函數
void f(void)
C++中的函數爲無參函數
void f()和void f(void)均可以
四。小結
1. C++更強調實用性,能夠在任何地方聲明變量
2.C++中的register只是一個向後兼容的做用,C++編譯器可以進行更好的變量優化
3.C++中的const是一個真正意義上的常量,而不是隻讀常量
4.C++更增強調類型,任意的程序元素都必須顯示指明類型。