C++:const的四種用法
阿新 • • 發佈:2019-02-13
一、用const修飾函式引數
1、修飾指標,可以防止指標被修改
void test(const ClassA* a)
{
ClassA** b = &a; //編譯錯誤,不能對const指標取地址
ClassA* c = a; //編譯錯誤,不能將const指標轉普通指標
(*b) = new ClassA();
}
void test2(ClassA* a)
{
ClassA** b = &a;
(*b) = new ClassA();
}
2、修飾普通型別,說明這個引數不應該被修改
void test(const int a)
{
a++; //編譯錯誤
int* c= &a; //編譯錯誤,不能取地址,否則就具備了改a的能力
int b = a; //不用強轉也可以編譯通過,但還是沒能力改a的值
}
3、修飾引用型別,引數的值不能被修改, 也就失去了引用型別的效果,但傳遞物件時,可以起到不copy物件的目的。
void test(const int& a)
{
a = 2; //編譯錯誤,不能修改const引用型別的值
}
void test(const ClassA& a) //傳遞的時候,不需要copy一個新的ClassA,又能保護a
{
}
二、用const修飾區域性或全域性變數,功能類似函式引數
三、用const修飾函式返回值,說明函式的返回型別是const的,功能類似於函式引數
const int test()
{
int a = 1;
return a;
}
四、用const修飾函式,說明函式不會修改成員變數的值
class ClassA
{
public:
int b;
int test() const
{
b = 3; //編譯錯誤,const修飾的函式不能修改類成員變數的值
return b;
}
}