假设我有这个简单的容器类
class Array{
private:
int m_l{};
int *m_d{};
public:
Array() = default;
Array(int len)
: m_l{len}
{
assert(len >= 0);
if (len > 0)
{
m_d = new int[len]{};
}
}
~Array(){
delete[] m_d;
}
// -------------------------------------------
int& operator[](int i){
assert(i >= 0 && i <= m_l && "Index in operator [] out of range");
return m_d[i];
}
//--------------------------------------------
};
具体来说
int& operator[](int i)
{
assert(i >= 0 && i <= m_l && "Index in operator [] out of range");
return m_d[i];
}
我已经重载了[]
运算符以获得下标,我只是在学习运算符重载和容器类。
Array arr{5};
arr[0] = 32;
arr[1] = 34;
std::cout << arr[0];
32
代码按预期编译和执行,但是如果我&
从函数中删除
int operator[](int i)
{
assert(i >= 0 && i <= m_l && "Index in operator [] out of range");
return m_d[i];
}
编译器抛出错误
左值需要作为操作数赋值的左侧
为什么会出现这个错误,&
函数中的意义是什么?