>>> 背景
我們知道對于一些C++內建類型來說,ostream類的操作符<<都提供了輸出到標準輸出流的方法,只需要像下面這樣就能輸出到終端窗口了。
int num = 1;
string str = "number";
cout < < str < < " is " < < num;
但是對于自建類的話,就需要其他的手段輸出想要的內容了。通過重載<<操作符并聲明為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;
}
};
>>> 問題
我在使用下面這串代碼對重載的效果進行測試的時候,編譯器報出了問題,它告訴把右值賦給了要求左值引用的參數。
cout < < Persion("maxwell", 18) < < endl;

>>> 解決方案
C++11之后,使用&來聲明左值引用,使用&&來聲明右值引用。在上述測試語句中,Persion( "maxwell" , 18 )是一個臨時變量,屬于右值。因此,如果想要上述測試語句通過,還需要對類補充一個右值引用的成員函數。如下所示。
class Persion
{
// ...
friend ostream& operator< (ostream& os, Persion&& per)
{
os < < "(rvalue)A persion object with name: " < < per.name < < ", age: " < < per.age;
return os;
}
};
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C++語言
+關注
關注
0文章
147瀏覽量
7682
發布評論請先 登錄
相關推薦
熱點推薦
關于光立方的驅動的一點看法
本帖最后由 ntmusic 于 2013-9-7 11:10 編輯
首先,我沒有自己做過光立方,所以在這里有點班門弄虎了但是,雖然沒有做過實物,但關于光立方的驅動我還是有一點點研究的一個好的光
發表于 09-07 09:42
關于看門狗的一點經驗程序
關于看門狗的一點經驗程序跑飛時可以通過看門狗復位,嘗試恢復系統的工作,本文對stm32的Markdown和擴展Markdown簡潔的語法代碼塊高亮圖片鏈接和圖片上傳LaTex數學公式UML序列圖
發表于 07-30 06:37
一點接地,什么是一點接地,一點接地應注意的問題
一點接地,什么是一點接地
一點接地的形式如下圖所示,圖中將各級內部的接地元件,即本級電路的發射極,基極和集電極的所有接
發表于 09-30 11:35
?2.9w次閱讀
路燈藍光危害你造嗎?專家建議“冷一點,暗一點”
美國醫學會(AMA)最近接受了一項關于街道照明的正式政策聲明:冷一點、暗一點。其在聲明中稱,對于晚上戶外照明,尤其是街道照明,其色溫不應超過3000開爾文(K)。較高的色溫光照越白,同
發表于 11-18 08:59
?3799次閱讀
一點理解之 CmBacktrace: ARM Cortex-M 系列 MCU 錯誤追蹤庫
一點理解之 CmBacktrace: ARM Cortex-M 系列 MCU 錯誤追蹤庫
發表于 11-30 19:51
?10次下載
關于右值引用的一點理解
評論