[英]Cannot pass value from overloaded operator
正如主題中所述,我遇到了將值從重載運算符傳遞回main函數的問題。 我已經搜索了很多但沒有效果。 這是我的示例運算符。 返回之前的線矩陣mi已經讓cout檢查算法是否正常工作。 乘法運算符我遇到了同樣的問題。
matrix.h
class Matrix
{
public:
...
Matrix &operator+(const Matrix &m)
...
private:
int x;
int y;
double **tab;
};
matrix.cpp
Matrix &Matrix::operator+(const Matrix &m)
{
if(x==m.x && y==m.y)
{
Matrix temp(x,y);
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
temp.tab[i][j]=tab[i][j]+m.tab[i][j];
}
}
cout << temp<< endl;
return temp;
}
else
{
char er[]={"error!\n"};
throw er;
}
}
基本問題是加法運算符不應返回引用,而是返回值:
Matrix operator+(const Matrix &m);
這適用於乘法,減法等。
除了返回對僅存在於函數范圍內的變量的引用這一事實之外,返回引用在語義上沒有意義。 想想這個表達式:
B + C;
如果要返回引用,它應該引用什么?
一種常見的方法是將Matrix& operator+=(const Matrix&)
為成員運算符,然后將其作為非成員實現:
Matrix operator+(Matrix lhs, const Matrix& rhs)
{
return lhs += rhs;
}
這使得操作對稱WRT LHS和RHS,允許雙方的隱式轉換。
簡單回答:永遠不會返回對您在函數中創建的對象的引用。 這意味着,您的操作員應該返回一個Matrix
,而不是一個Matrix&
( &
屬於返回類型,您可能希望將其放在那里以使其更明顯)。
如果為Matrix類提供適當的移動構造函數,則返回結果時不會有昂貴的副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.