【发布时间】:2022-01-20 09:37:37
【问题描述】:
我有以下代码:
#include <iostream>
#include <cassert>
class Matrix
{
private:
double m_data[3][3]{};
public:
double& operator()(int row, int col);
};
double& Matrix::operator()(int row, int col)
{
assert(col >= 0 && col < 3);
assert(row >= 0 && row < 3);
return m_data[row][col];
}
int main()
{
Matrix matrix;
matrix(1, 2) = 4.5;
std::cout << matrix(1, 2) << '\n';
return 0;
}
我想知道以下行如何将4.5 分配给m_data[1][2]。
matrix(1, 2) = 4.5;
其实double& operator()(int row, int col)函数内部并没有赋值。它只有return m_data[row][col]; 语句。它不应该只返回m_data[1][2] 的值吗?在这种情况下,默认为0。
【问题讨论】:
-
它返回一个
double&,可以用内置的operator=(double)分配给它 -
您知道值 (
double) 和引用 (double&) 之间的区别吗? -
你知道
double& x = matrix(1,2); x = 4.5;做那个任务吗? -
标题与问题正文中表达的误解不符。
标签: c++ c++11 operator-overloading