c++中的常量,常物件,常引用,常指標
阿新 • • 發佈:2018-12-16
所謂常量是指在程式執行中值始終不可改變的量。而常物件是指他的資料成員在物件的整個生存週期內不能改變。這也意味著不能用常物件去呼叫普通的成員函式,因為有可能會改變常物件的資料成員,所以便有了常成員函式。如果一個物件被宣告為常物件,他只能呼叫常成員函式。普通物件也能呼叫常成員函式,但是會被視為常物件,即不能改變資料成員的值。
c++中用引用作形參來對實參進行操作而提高效率,但是有時不希望對實參進行更改或者傳遞的是常物件,這時就應該採用常引用的方式。
常引用宣告方式:const 型別識別符號 &引用名 = 目標變數名;
- 一旦引用被初始化為一個物件,就不能被指向到另一個物件。指標可以在任何時候指向到另一個物件。
- 所以不存在引用常量的說法
用這種方式宣告的引用,不能通過引用對目標變數的值進行修改,從而使引用的目標成為const,達到了引用的安全性。
#include<iostream> using namespace std; int main() { int a=10,b=12; int const &p=a;//const int &p=a;常量引用,引用是個常量,一旦引用被初始化為一個物件,就不能被指向到另一個物件。 // p=b;//報錯assignment of read-only reference 'p',p為只讀變數 //p=a;//也報錯,assignment of read-only reference 'p',反正不能有引用指向的語句 a=13; cout<<p<<endl;//13;值可以改變 //p=13; //cout<<p<<endl;//報錯assignment of read-only reference 'p',不能通過p改變值 return 0; }
常量指標又叫常指標,指的是宣告的一個指標變數是一個常量,不允許發生改變,也就是該指標不能指向其他地址。但是該指標所指的物件是可以發生改變的。
#include<iostream> using namespace std; int main() { int a=10,b=12; int *const p=&a;//const和int的位置不能互換 //常量指標,該指標是個常量,顧名思義指標不能指向其他的地址,但指標所指向的地址中的內容可以改變 a=13; cout<<*p<<endl;//13 *p=15; cout<<*p<<endl;//15 // p=&b;//報錯指標不能指向其他的地址 //cout<<*p<<endl; return 0; }
指向常量的指標,也叫指標常量,顧名思義,該指標變數指向的是一個常量,指標所指的常量不允許改變,但是該指標可以指向其他地址。
#include<iostream>
using namespace std;
int main()
{
int a=10,b=12;
int const *p=&a;//等同於const int *p=&a;const和int位置可以互換;
//指標常量,指向常量的指標,所指地址的內容不能通過指標改變,指標可以改變所指的地址
a=13;
cout<<*p<<endl;//13
a=b;
cout<<*p<<endl;//12
//*p=14;//報錯不能通過指標改變值,但可以通過其他方式改變a的值
//cout<<*p<<endl;
p=&b;//12
cout<<*p<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int const a=13;
int *p=a;//報錯 invalid conversion from 'int' to 'int*' [-fpermissive]|
//因為它消除了a的const屬性
return 0;
}
通過*的位置來記憶
如int * const a = &b; 後面是a,則說明a不能修改!為常量指標
int const * a = &b;後面是*a則說明*a不可被修改!為指標常量