今天在寫**的時候,發現新增了下面的這個函式(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 引用形參 那麼將會修改實參的值 而他本身不會修改?那麼引用是實參的別名而後...