C+中的二维数组+;/编译器/重载 实际上,我对C++中的二维数组有一个问题。第一个问题是编译器如何将有差异的二维数组解释为“正常”的一维数组。然后我需要为二维数组实现一个操作符重载

C+中的二维数组+;/编译器/重载 实际上,我对C++中的二维数组有一个问题。第一个问题是编译器如何将有差异的二维数组解释为“正常”的一维数组。然后我需要为二维数组实现一个操作符重载,c++,arrays,design-patterns,multidimensional-array,proxy,C++,Arrays,Design Patterns,Multidimensional Array,Proxy,这是普通数组的重载运算符: const float& Matrix::operator[] (int index) const { const float& value = this->m[index]; return value; } 这是二维数组的重载运算符: const float& Matrix::operator[][](int index, int ndIndex) const { const float& value

这是普通数组的重载运算符:

const float& Matrix::operator[] (int index) const
{
    const float& value = this->m[index];
    return value;
}
这是二维数组的重载运算符:

const float& Matrix::operator[][](int index, int ndIndex) const
{
    const float& value = this->m[index][ndIndex];
    return value;
}
这是[][]运算符重载的正确实现吗

还有一个问题,为什么在[]解决方案中很难获得对阵列的写访问权。最后一个问题是这个问题可以用代理模式来解决,但我从来没有听说过代理是一种编程模式

所有这些问题都是理论性的,所以我不需要真正的代码,只需要“幕后”的上下文和关于代理模式的注释


如果你能帮我,那就太好了!提前谢谢

C++
中没有
运算符[][]
。您不需要复杂的代理,只需重载
操作符[]
并使其返回一个数组(对应于行)。从某种意义上说,这就是代理(返回的数组)

比如:

float* Matrix::operator[](int row) // non-const version
{
    return m[row];
}

(下次如果你有两个问题,请问两个问题。所以是免费的。)


为了澄清问题的第二部分,代理对象是表示二维数组行的对象。它由第一级
运算符[]
返回,代理本身实现第二级
运算符[]

当我认为第一级允许写入,第二级允许只读时,我是否正确??是的,正确。第二个用于
const
访问(即使用
const
引用等)。
const float* Matrix::operator[](int row) const // const overload
{
    return m[row];
}