1. 程式人生 > >C++ 中臨時物件 和 const 物件 的一個區別

C++ 中臨時物件 和 const 物件 的一個區別

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; }