C 對C的加強和拓展

2021-08-21 13:53:24 字數 1897 閱讀 5015

1.命名空間。

c++標準庫  #include , 命名空間為 std  

namespace 是c++中的關鍵字,用來定義乙個命名空間,語法格式為:

namespace name

name是命名空間的名字,它裡面可以包含變數、函式、類、typedef、#define 等,最後由包圍,

且命名空間可以巢狀。

以下是乙個例項

#include using namespace std;

namespace a

return 0;

}

3.register關鍵字

register關鍵字請求「編譯器」將區域性變數儲存於暫存器中, 

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

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

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

2、c++中可以取得register變數的位址

c++編譯器發現程式中需要取register變數的位址時,register對變數的宣告變得無效。

4.變數檢測加強

c++中不允許定義多個同名的全域性變數

#include int a;

int a = 1;

int main()

用gcc編譯完全可以,但用g++編譯時編譯器會報錯

5.struct型別的加強 

c語言的struct定義了一組變數的集合,c編譯器並不認為這是一種新的型別。

c++中的struct是乙個新型別的定義宣告。

c語言中 struct 定義了一組資料的集合,而不是一種新的資料型別,

所以在定義變數的時候需要在前面加上 struct 關鍵字進行修飾。

c++中 struct 定義了一種新的資料型別,可以直接用來定義變數。

#include using namespace std;

struct student; 

int main()

;    return 0;

}

6.型別和返回值

c中函式可以沒有返回引數型別,函式引數可以沒有資料型別,

沒有引數的函式可以接收任意個引數。

在c語言中

int f(    );表示返回值為int,接受任意引數的函式

int f(void);表示返回值為int的無參函式

在c++中

int f(  );和int f(void)具有相同的意義,都表示返回值為int的無參函式。

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

7.bool型別關鍵字

c++中的布林型別

c++在c語言的基本型別系統之上增加了bool

c++中的bool可取的值只有true和false

理論上bool只占用乙個位元組,

如果多個bool變數定義在一起,可能會各佔乙個bit,這取決於編譯器的實現。

true代表真值,編譯器內部用1來表示。

false代表非真值,編譯器內部用0來表示。

bool型別只有true(非0)和false(0)兩個值

c++編譯器會在賦值時將非0值轉換為true,0值轉換為false。

8.三目運算子的加強

c語言返回變數的值, c++語言是返回變數本身。

c語言中的三目運算子返回的是變數值,不能作為左值使用。

在c中怎麼才能實現和c++一樣的效果,只需取位址就可以了

#include int main()

C 對C的加強

c 是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c 擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c 就適應的問題規模而論,大小由之。c 不僅擁有計算機高效執行的實用性特徵,...

C 對C的加強

c 是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c 擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c 就適應的問題規模而論,大小由之。c 不僅擁有計算機高效執行的實用性特徵,...

c 對c的加強

1.register關鍵字的加強 register修飾符暗示編譯程式相應的變數將被頻繁地使用,如果可能的話,應將其儲存在cpu的暫存器中,以加快其儲存速度,這只是一種請求,編譯器可以拒絕這種申請。1 register變數必須是能被cpu所接受的型別。這通常意味著register變數必須是乙個單個的值...