C (基礎) c和c 的區別(二)

2021-08-30 22:09:46 字數 3000 閱讀 2556

c語言中const的用法:

1)、const就是定義乙個常變數 const int a = 10;

2)、資料型別對於const是透明的(const int 等同於int const);

3)、const直接修的內容不能做左值;(左值:放在=符號左邊,用寫許可權;右值:只可讀不可寫)

4)、const在許可權傳遞時,只能同等或者縮小傳遞,不能放大傳遞;

因為在之前文章中有具體介紹c語言中const的具體用法,所以在此就不過多贅述。

c++中const的基本特性及用法:

基本特性:

1)、const定義的是常量,值不允許改變。

例:

const int a = 10;

int arr[a];//ok,因為a是不可改變的常量。

2)、(const定義的)常量必須初始化。

因為c++中規定,在編譯期的時候,將使用該常量的地方替換成常量的值。

所以常量在初始化時不給其賦值,則此常量就是無用常量。

例:

const int a = 10;

//const int a;//如果這樣不初始化a,下邊列印就會出現錯誤

int *p = (int *)&a;

*p = 20;

cout << *p << " " << a << endl;//輸出:20 10

//在編譯期生成指令的時候,本作用域內的a就會被10替換。

3)、const修飾的資料產生的符號是local的(此資料僅限於本檔案使用)

因為在編譯期的時候,會進行常量值的替換,此過程只在本檔案中進行,所以外檔案無法解析本檔案const定義的常量。
4)、const定義的常量可退化成常變數(編譯期無法確定其值的時候)

例:

情況1、int c = 10;      const int a = c;

情況2、void fun(const int a)//作為形參的時候。

int c = 20;

const int d = c;//退化成常變數,因為c是變數,所以d的值是無法確定的。

int *p2 = (int *)&d;

*p2 = 30;

cout << *p2 << " " << d <<" "《基本用法:

1)、const修飾的型別是離他最近的完整型別

2)、const 修飾的內容是屬於他修飾型別的內容

3)、const修飾的內容不允許改變

4)、不允許洩露常量的位址給非常量的指標

例:int main()

1、基本特性:

1)、引用相當於變數的別名,對引用的操作與對變數直接操作完全一樣。

例:

//交換函式

void swap(int *const a, int *const b)// 指標

void swap(int &a, int &b) // 引用

2)、引用必須初始化。

例:

int main()

3)、底層是乙個指標 ,在使用地方替換成了指標的解引用。

例:

//  接  2) **

b = 20;

//引用的底層實現

/* 002e554b mov eax,dword ptr [b]

002e554e mov dword ptr [eax],14h

*/ *p = 20;

//指標的底層實現

/* 002e5554 mov eax,dword ptr [p]

002e5557 mov dword ptr [eax],14h

*/

4)、不允許洩露常量的引用給非常量引用

例:

const int a = 10;

const int &p1 = a;

int &p = p1; // error , 將常量的引用洩露給了非常量引用

2、基本用法:

1)、引用產生的臨時量問題:

1、標準型別產生的臨時量是常量:

例: const int &c = fun(); // fun()是外檔案函式

引用乙個不可定址的常量,此時就會產生乙個臨時量 , 這個臨時量是個常量。

2、自定義型別產生的臨時量是非常量:

例: const int &d = 10;//產生乙個臨時量供引用

a &e = funa(); // a是自定義型別,funa()自定義型別函式。

引用乙個臨時量 臨時量是非常量

2)、引用( & )和 const 對引數型別(函式過載)的影響

1、引用單獨使用不參與型別

例: bool compare(int &a, int &b);

2、const 單獨使用不參與型別

例: bool compare(const int a, const int b);

bool compare(int a, int b);

這兩個函式的引數型別都是(int,int),所以不能構成過載

3、& 與 const 結合參與型別 ,可以形成過載

例: bool compare(const int &a, const int &b)

4、const 修飾指標,如果修飾的內容裡面沒有*,則const不參與型別

例: void compare(int *const p1, int *const p2);

3)、如何用c語言的編譯規則編譯c++程式?

先寫乙個c語言函式接收c++程式,然後轉換成c語言編譯規則。
extern "c"

};

C 和C的區別

c 與c語言的關係 1 c 繼承了所有的c特性 2 c 在c的基礎上提供了更多更好的語法和特性 3 c 的設計目標是執行效率和開發效率的統一 c 對c語言的加強 1 c 中所有的變數都可以再需要使用時再定義 如 for迴圈等中需要的變數 3 c中可以定義多個同名的全域性變數 c 不可以 4 cons...

C和C 的區別

這裡主要討論的是區別,而不是c 中有的,而c語言中沒有的東西。c 比c語言多了很多東西,最重要的當屬類 物件導向程式設計 和模板 泛型程式設計 基於泛型程式設計還引出了元程式設計 metaprogramming 等等。這裡討 共部分但是不一樣的部分 函式過載是c 支援的,c不支援 c 的函式過載在類...

C 和C的區別

c c 的聯絡 c c 區別 小知識點補充擴充套件 free 而new開闢物件陣列用的是new size 釋放的的時候是 delete 5 返回值問題,malloc開闢成功返回void 需要強轉,失敗返回null,new 成功返回物件指標,失敗丟擲異常 這就可能會提到c 的new handler機 ...