//報(bào)錯(cuò)信息
error: cannot bind non-const lvalue reference of type 'std::vector<int>&' to an rvalue of type 'std::vector<int>'
報(bào)錯(cuò)原因:
當(dāng)函數(shù)使用非Const類型的形式參數(shù)時(shí),編譯器會(huì)認(rèn)為該函數(shù)會(huì)修改該參數(shù),且該參數(shù)返回后還會(huì)發(fā)揮作用。
如果把一個(gè)臨時(shí)變量當(dāng)成非const引用類型傳入,由于臨時(shí)變量可能隨時(shí)會(huì)消失,修改臨時(shí)變量也毫無(wú)意義。
因此,臨時(shí)變量不能作為非const引用。
例如++++i與i++++的區(qū)別,前者是合法的,后者是非法的。前者是i自增后再參與其他運(yùn)算,后者是i參與運(yùn)算后對(duì)產(chǎn)生的臨時(shí)變量自增1。
// 參考代碼
void Func1(vector<int> v){
cout<<"Success"<<endl;
}
void Func2(vector<int> &v){
cout<<"Success"<<endl;
}
void Func3(const vector<int> &v){
cout<<"Success"<<endl;
}
int main(){
vector<int> v = {1, 2, 3};
Func1(vector<int>());
Func2(vector<int>()); //報(bào)錯(cuò)行
Func3(vector<int>());
}