C 中const物件引用做為形參

2021-06-20 01:22:49 字數 1077 閱讀 4885

今天在寫**的時候,發現新增了下面的這個函式(update)之後,怎麼都編譯通不過。大概的原始**如下:

#include#includeusing namespace std;

class syncscheduler

string& getname()

private:

string _name;

};void update(const string& name)

這是什麼原因呢?查閱了相關資料後,發現了一些線索。

"在c++中可以傳物件引用,比用指標方便,但是為了避免在函式中物件被修改,需要加const限定符,相應的,在實現物件的成員函式時,也要新增const,這樣,因為只有const成員函式才能被const物件呼叫。"

先舉例說明:

class file

const string getfilename() const

string getfilepath() const

private:

string _filename;

string _filepath;

}; void test(const file& f)

const string getfilename() const

string getfilepath() const

private:

string _filename;

string _filepath;

}; void test1(const string& str)

{ cout<<"test1 :"《執行結果如下:

test1 :a.out

test2 :a.out

test1 :/root

test2 :/root

ss   is:/root

press any key to continue . . .

在上面的結果中可看出,函式前面的const是非必須的。但是,為何syncscheduler::getname()需要呢。不同之處在於getname返回的是乙個引用!為了確保成員_name不會被改變,它的引用者必須也是const型別的。

函式形參中的const引用

這裡將c primer中函式形參章節有關const和引用的問題簡單小結如下 一 非const非引用形參 這個是乙個平庸的情形。函式引數通過複製對應的實參實現初始化,函式本身對形參的修改不會影響到實參。傳遞給這類函式的實參可以是乙個const型的物件,也可以是非const的物件。乙個需要注意的事情是,...

函式形參 指標,引用,const,陣列形參

指標也是物件,也會拷貝,所以分實參指標和形參指標。在傳進函式時,實參進行拷貝,所以在函式裡改變指標值不影響實參。void reset int ip 引用不是物件,通過引用可以改變實參 void reset int i 使用引用的好處是避免了拷貝。其實也只是兩個變數名的傳遞,和變數規則一致,如果在函式...

const引用形參的意義

如const int ival 首先如果它只是const非引用形參那麼實參是否為const對它沒有影響,因為只是傳遞副本。而當它為非const引用形參,那麼它是實參的別名,對它的修改也就是對實參本身的修改,而當它為const 引用形參 那麼將會修改實參的值 而他本身不會修改?那麼引用是實參的別名而後...