>>> 背景
我們知道對于一些C++內(nèi)建類型來說,ostream類的操作符<<都提供了輸出到標準輸出流的方法,只需要像下面這樣就能輸出到終端窗口了。
int num = 1;
string str = "number";
cout < < str < < " is " < < num;
但是對于自建類的話,就需要其他的手段輸出想要的內(nèi)容了。通過重載<<操作符并聲明為ostream類的友元是常見的方法。下面就是一種常見的書寫范式。
class Persion
{
private:
string name;
int age;
public:
Persion() = delete;
Persion(string a_name, int a_age) :
name(a_name), age(a_age) {}
friend ostream& operator< (ostream& os, Persion& per)
{
os < < "(lvalue)A persion object with name: " < < per.name < < ", age: " < < per.age;
return os;
}
};
>>> 問題
我在使用下面這串代碼對重載的效果進行測試的時候,編譯器報出了問題,它告訴把右值賦給了要求左值引用的參數(shù)。
cout < < Persion("maxwell", 18) < < endl;
>>> 解決方案
C++11之后,使用&來聲明左值引用,使用&&來聲明右值引用。在上述測試語句中,Persion( "maxwell" , 18 )是一個臨時變量,屬于右值。因此,如果想要上述測試語句通過,還需要對類補充一個右值引用的成員函數(shù)。如下所示。
class Persion
{
// ...
friend ostream& operator< (ostream& os, Persion&& per)
{
os < < "(rvalue)A persion object with name: " < < per.name < < ", age: " < < per.age;
return os;
}
};
-
C++語言
+關(guān)注
關(guān)注
0文章
147瀏覽量
6944
發(fā)布評論請先 登錄
相關(guān)推薦
評論