>>> 背景
我們知道對(duì)于一些C++內(nèi)建類(lèi)型來(lái)說(shuō),ostream類(lèi)的操作符<<都提供了輸出到標(biāo)準(zhǔn)輸出流的方法,只需要像下面這樣就能輸出到終端窗口了。
int num = 1;
string str = "number";
cout < < str < < " is " < < num;
但是對(duì)于自建類(lèi)的話,就需要其他的手段輸出想要的內(nèi)容了。通過(guò)重載<<操作符并聲明為ostream類(lèi)的友元是常見(jiàn)的方法。下面就是一種常見(jiàn)的書(shū)寫(xiě)范式。
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;
}
};
>>> 問(wèn)題
我在使用下面這串代碼對(duì)重載的效果進(jìn)行測(cè)試的時(shí)候,編譯器報(bào)出了問(wèn)題,它告訴把右值賦給了要求左值引用的參數(shù)。
cout < < Persion("maxwell", 18) < < endl;
>>> 解決方案
C++11之后,使用&來(lái)聲明左值引用,使用&&來(lái)聲明右值引用。在上述測(cè)試語(yǔ)句中,Persion( "maxwell" , 18 )是一個(gè)臨時(shí)變量,屬于右值。因此,如果想要上述測(cè)試語(yǔ)句通過(guò),還需要對(duì)類(lèi)補(bǔ)充一個(gè)右值引用的成員函數(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++語(yǔ)言
+關(guān)注
關(guān)注
0文章
147瀏覽量
7223
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)各位大俠關(guān)于開(kāi)關(guān)電源哪些書(shū)講的比較容易理解一點(diǎn)啊,謝謝
有沒(méi)有什么好的方法來(lái)理解引用句柄
關(guān)于光立方的驅(qū)動(dòng)的一點(diǎn)看法
關(guān)于看門(mén)狗的一點(diǎn)經(jīng)驗(yàn)程序
一點(diǎn)接地,什么是一點(diǎn)接地,一點(diǎn)接地應(yīng)注意的問(wèn)題

關(guān)于畫(huà)高頻PCB板的一點(diǎn)心得
路燈藍(lán)光危害你造嗎?專(zhuān)家建議“冷一點(diǎn),暗一點(diǎn)”
一點(diǎn)理解之 CmBacktrace: ARM Cortex-M 系列 MCU 錯(cuò)誤追蹤庫(kù)

什么是左值、右值呢?左右值和左右值引用

評(píng)論