C++ 中臨時物件 和 const 物件 的一個區別
阿新 • • 發佈:2019-02-12
C++ 中臨時物件和const物件的一個區別
const 物件特點
1,只能作為右值
2,只能呼叫物件的const方法
臨時物件特點
1,只有作為為 const& 賦值 給其它物件
2,可以呼叫物件的非 const方法 //但是這樣是無效的改變,修改資訊會被丟失
解決方法
約定: 除賦值運算外的其他運算子在過載時返回const 臨時物件
//ps:賦值運算返回物件引用,方便連綴表示式(如” (a=b).f()”)
code
#include <iostream>
#include <string>
using namespace std;
class A{
int i;
public:
A(int ii):i(ii){}
A operator+(const A& r)
{
this->i += r.i;
return *this;
}
A change(const int& ii)
{
return A(ii);
}
friend ostream& operator<<(ostream& os,const A& a)
{
return os << a.i;
}
};
int main()
{
string s1 = "a";
string s2 = "b";
string s3 = "ok";
const string s4= "456";
int i1 = 1;
int i2 = 2;
cout << ( (s1 + s2) = s3 )<<endl;
// s4.assign("123"); //not ok
// cout << (i1 + i2 = 3 )<<endl; //not ok 因為int只是內建型別 非類
A n1 = A(3);
A n2 = A(4);
const A n3(5);
cout << (n1 + n2).change(3) <<endl;
// n3.change(7); //not ok
return 0;
}