C++中const的簡單用法
C++是C語言的繼承,它既可以進行C語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。C++擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而C++就適應的問題規模而論,大小由之 |
常量宣告的語句的形式: const + 資料型別說明符 + 常量名 = 常量值
資料型別說明符 + const + 常量名 = 常量值
注意: 符號常量在宣告時一定要賦初值,且在程式中不能改變其值。
const float PI = 3.14159; //下面則是錯誤的宣告 const float PI; PI = 3.14159;
目前瞭解的形式
例如:
const int *p (int const *p) int *const p const int* const p
二者表達的意思一致,即 *p 是個 const ,不能透過 *p 修改 p 的指向,所以也可以叫它為只讀型指標
由於是將指向的資料視為常量,定義的時候可以不用初始化
1. int a = 0; const int* p; p = &a; *p = 2; //錯誤,不能透過*p 修改值
2. int a = 0; const int* p = &a; a = 1; cout< < *p << endl; //此時p指向的值可以改變,列印出來為 1
3. int a= 0,b = 1; const int* p = &a; cout< < *p << endl; //*p 值為 0 p = &b; cout << *p << endl; //*p 值為 1
該定義將 p 視為一個const常量,所以定義時就要初始化,且p 指向的位置不能改變,所以也可以叫它指標常量
1. int a = 0,b =1; int* const p = &a; p = &b; //錯誤,p 的指向已不能改變
2. int a = 0, b = 1; int* const p = &a; *p = b; cout < < *p << endl; //*p 為 1
3. int a = 0, b = 1; int*const p = &a; a = b; cout < < *p << endl; //*p 為 1
(const int* p 與 int* const p 與 const int* const p 的區別)
const int* p 表示把 p 指向的變數看成常量
int* const p 表示把 p 自己定義為常量,所以定義時就要初始化
const int* const p 表示 p、*p 都是常量,即 p 的指向不能改變,也不能透過 *p 改變 p 指向的值
有個評論講的很有意思,share一下:
看"effective c++"第三條講到:
只需要判斷const是在 * 的左邊還是右邊即可。
左邊則是修飾被指物,即被指物是常量,不可以修改它的值;
右邊則是修飾指標,即指標是常量,不可以修改它的指向;
在左右兩邊,則被指物和指標都是常量,都不可以修改。
int c = 3; int a = 2; int b = 1; //const出現在*左邊,則被指物是常量 const int * pi = &a; *pi = b;//不正確 被指物是常量 pi = &c; //正確 //const 出現在* 右邊,則指標是常量 int * const p = &a; p = &c;//不正確,指標是常量 *p = c;//正確 //const出現在*左右兩邊,則被指物和指標都是常量 const int * const ptr = &a; ptr = &c;//不正確,指標是常量 *ptr = c;//不正確,被指物是常量
注意事項 !
1.如果有const int a = 0; 那麼必須是 const int* 才能指向 a,像 int* p =&a; 是非法的 2.const int a =10; int* p =&a; // 錯誤,這是不能取地址的,否則有修改值的能力
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2660871/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++中const的用法C++
- C++中const的妙用C++
- C/C++中的constC++
- C++ const void * 型別轉換簡單測試C++型別
- Python中的selenium的簡單用法Python
- C++ 中的 const 物件與 const 成員函式C++物件函式
- C++中的 const 關鍵字C++
- C++中const小結C++
- fstream中ifstream和ofstream的簡單用法
- Promise的簡單用法Promise
- C++中& 的基本用法C++
- 一個簡單例子教會你C++動態庫的用法單例C++
- Const 用法總結
- Opentelemetry SDK的簡單用法
- CyclicBarrier簡單用法
- realloc簡單用法
- Python中那些簡單又好用的特性和用法Python
- js迴圈中reduce的用法簡單介紹JS
- 簡單介紹SQLserver中的declare變數用法SQLServer變數
- C++ const常量的理解C++
- C++ 頂層const底層constC++
- C++中const與指標、引用的總結C++指標
- C++中string、char *、char[]、const char*的轉換C++
- C/C++const用法C++
- MD5的簡單用法
- linux下mail的簡單用法LinuxAI
- 繼續總結Python中那些簡單好用的用法Python
- golang flag簡單用法Golang
- C++中函式呼叫的用法C++函式
- C++中簡單使用HP-SocketC++
- C#中const 和 readonly 修飾符的用法詳解C#
- C++ 中 inline 用法概述C++inline
- C++ constexp vs constC++
- C++ const 總結C++
- C++基礎 constC++
- 簡單介紹Python中異常處理用法Python
- C++中巨集定義#define的用法C++
- git-stash簡單用法Git