C++ const修飾函式、函式引數、函式返回值
阿新 • • 發佈:2019-01-07
const修飾函式
在類中將成員函式修飾為const表明在該函式體內,不能修改物件的資料成員而且不能呼叫非const函式。為什麼不能呼叫非const函式?因為非const函式可能修改資料成員,const成員函式是不能修改資料成員的,所以在const成員函式內只能呼叫const函式。- #include <iostream>
- usingnamespace std;
- class A{
- private:
- int i;
- public:
- void set(int n){ //set函式需要設定i的值,所以不能宣告為const
- i = n;
- }
- int
- return i;
- }
- };
const修飾函式引數
防止傳入的引數代表的內容在函式體內被改變,但僅對指標和引用有意義。因為如果是按值傳遞,傳給引數的僅僅是實參的副本,即使在函式體內改變了形參,實參也不會得到影響。如:- void fun(constint i){
- i = 10;
- }
const修飾的函式引數是指標時,代表在函式體內不能修改該指標所指的內容,起到保護作用,在字串複製的函式中保證不修改源字串的情況下,實現字串的複製。
- void
- strcpy(des,src);
- }
- void main(){
- char a[10]="china";
- char b[20];
- fun(a,b);
- cout<<b<<endl;
- }
const修飾引用時:如果函式引數為使用者自定義的類物件如:
- void h(A a){
- …………
- …………
- }
- void
- …………
- …………
- }
const修飾函式返回值
也是用const來修飾返回的指標或引用,保護指標指向的內容或引用的內容不被修改,也常用於運算子過載。歸根究底就是使得函式呼叫表示式不能作為左值。- #include <iostream>
- usingnamespace std;
- class A {
- private:
- int i;
- public:
- A(){i=0;}
- int & get(){
- return i;
- }
- };
- void main(){
- A a;
- cout<<a.get()<<endl; //資料成員值為0
- a.get()=1; //嘗試修改a物件的資料成員為1,而且是用函式呼叫表示式作為左值。
- cout<<a.get()<<endl; //資料成員真的被改為1了,返回指標的情況也可以修改成員i的值,所以為了安全起見最好在返回值加上const,使得函式呼叫表示式不能作為左值
- }