c/c++中const用法总结
const類型定義:指明變量或?qū)ο蟮闹凳遣荒鼙桓?引入目的是為了取代預(yù)編譯指令
**************常量必須被初始化*************************
cons的作用
?? (1)可以定義const常量??????? ?例如:
???????????? const int Max=100;
???????????? int Array[Max];???????
?? (2)便于進行類型檢查?????????? ?例如:
???????????? void f(const int i) { .........}
??????? 編譯器就會知道i是一個常量,不允許修改;
?? (3)可以保護被修飾的東西,防止意外的修改,增強程序的健壯性。
??????? 還是上面的例子,如果在函數(shù)體內(nèi)修改了i,編譯器就會報錯;
??????? 例如:
???????????? void f(const int i) { i=10;//error! }
??? (5) 為函數(shù)重載提供了一個參考。
???????? class A
???????? {
?????????? ......
?????????? void f(int i)?????? {......} file://一個函數(shù)
?????????? void f(int i) const {......} file://上一個函數(shù)的重載
??????????? ......
????????? };
???? (6) 可以節(jié)省空間,避免不必要的內(nèi)存分配。
???????? 例如:
????????????? #define PI 3.14159???????? file://常量宏
????????????? const doulbe? Pi=3.14159;? file://此時并未將Pi放入ROM中
????????????? ......
????????????? double i=Pi;?????????????? file://此時為Pi分配內(nèi)存,以后不再分配!
????????????? double I=PI;?????????????? file://編譯期間進行宏替換,分配內(nèi)存
????????????? double j=Pi;?????????????? file://沒有內(nèi)存分配
????????????? double J=PI;?????????????? file://再進行宏替換,又一次分配內(nèi)存!
???????? const定義常量從匯編的角度來看,只是給出了對應(yīng)的內(nèi)存地址,而不是象#define一樣給出的是立即數(shù),所以,const定義的常量在程序運行過程中只有一份拷貝,而#define定義的常量在內(nèi)存中有若干個拷貝。
???? (7) 提高了效率。
?????????? 編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內(nèi)存的操作,使得它的效率也很高。
使用const
?? (1)修飾一般常量,常數(shù)組,常對象
?修飾符const可以用在類型說明符前,也可以用在類型說明符后。????? 例如:??
?????????? int const x=2; 或 const int x=2;
???? int const a[5]={1, 2, 3, 4, 5};??? 或? const int a[5]={1, 2, 3, 4, 5};
??????? ?? class A; ???? const A a;? 或???? A const a;
???
?? (2)修飾指針
??????? const int *A;???或? int const *A; //const修飾指向的對象,A可變,A指向的對象不可變
??????? int *const A; ??????????? //const修飾指針A,???? A不可變,A指向的對象可變
??????? const int *const A;????? //指針A和A指向的對象都不可變
?? (3)修飾引用
? ???? const double & v;????? 該引用所引用的對象不能被更新
(4)修飾函數(shù)的返回值:
??????? const修飾符也可以修飾函數(shù)的返回值,是返回值不可被改變,格式如下:
??????????? const int Fun1();
??????????? const MyClass Fun2();
?? (5)修飾類的成員函數(shù):
??????? const修飾符也可以修飾類的成員函數(shù),格式如下:
??????????? class ClassName
???? {
???????????? public:
??????????? ??? int Fun() const;
??????????? ?????? .....
???????????? };
??????? 這樣,在調(diào)用函數(shù)Fun時就不能修改類里面的數(shù)據(jù)
??? (6)在另一連接文件中引用const常量
???????? extern const int i;???? //正確的引用
???????? extern const int j=10;? //錯誤!常量不可以被再次賦值
???
*******************放在類內(nèi)部的常量有什么限制?
??
??????? class A
??????? {
???????? private:
?????????? const int c3 = 7;?????????????? //?err
?????????? static int c4 = 7;?????????????? //?err
???????????static const float c5 = 7;? //?err
????????? ......
? };
?初始化類內(nèi)部的常量
????????1 初始化列表:
???????? class A
???????? {
????????? public:
??????????????? A(int i=0):test(i) {}
????????? private:
??????????????? const int i;
????????? };
?????????2 外部初始化,例如:
???????? class A
???????? {
????????? public:
??????????????? A() {}
????????? private:
??????????????? static const int i;??
????????? };
????????? const int A::i=3;
轉(zhuǎn)載于:https://www.cnblogs.com/solo/archive/2007/03/09/669758.html
總結(jié)
以上是生活随笔為你收集整理的c/c++中const用法总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2007新年新气象
- 下一篇: RSS你会用了吗?答曰:不会