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機 ...