//代碼如下
#include <iostream>
using namespace std;
class Per
{
int m_A;
public:
Per(int num ){
m_A = num;
}
//多載<<
friend ostream& operator<<(ostream& out, Per& p){
out << "m_A = " << p.m_A;
return out;
}
//多載后置++
Per operator++(int ){
Per temp = *this;
this->m_A++;
return temp;
}
};
int main()
{
Per p(10);
cout << p << endl;
p++;
cout << p <<endl;//編譯成功
// cout << p++ << endl;//編譯失敗
return 0;
}
//為什么第二個同時使用<<和后置++就會報錯?還請大佬明示
uj5u.com熱心網友回復:
friend ostream& operator<<(ostream& out, Per& p)里的Per&改為Per,P++不是左值uj5u.com熱心網友回復:
為什么加一個const Per&又可以了?const Per& 和Per 有什么區別呢?
uj5u.com熱心網友回復:
參考正常是不能參考右值的,C++11之后的右值參考&&除外,加了const就可以參考右值了,例如const int &a = 1是正常的,而int &a = 1是非法的
uj5u.com熱心網友回復:
一個類最好提供建構式,拷貝建構式,operator=uj5u.com熱心網友回復:
//多載<<friend ostream& operator<<(ostream& out, const Per& p){
這是輸出流多載的正宗豬腰子臉
uj5u.com熱心網友回復:
p++ 的多載沒有問題的后綴++ 的定義也是回傳值后自增
這里也不能回傳臨時變數的參考, 臨時變數函式執行后記憶體就失效了
uj5u.com熱心網友回復:
cout << p << endl;cout << p++ << endl;
之間的差異就是, 前者是一個真正的變數, 而p++是個運算式,回傳的是臨時的值
前者可以參考,后者是值型別不能參考
補充上3樓所說的, 值型別的const參考合法,就可以解釋 ostream當中,為什么必須是const Per& 了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/134382.html
標籤:C++ 語言
