实际上,我对 C++ 中的二维数组有疑问。第一个问题是编译器如何将二维数组解释为与“普通”一维数组不同。然后我需要为二维数组实现运算符重载。
这是普通数组的重载运算符:
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;
}
这是 [][] 运算符重载的理论上正确的实现吗?
然后有一个问题,为什么在[][]方案中很难获得对数组的写权限。最后一个问题是这个问题可以用Proxy模式来解决,但是我从来没听说过Proxy是programm模式。
所有这些问题都是理论上的,所以我不需要真正的代码,只需要“幕后”的上下文和关于代理模式的 scetch。
如果你能帮助我,那就太好了!提前致谢!!
最佳答案
C++
中没有operator[][]
。您不需要花哨的代理,只需重载 operator[]
并使其返回一个数组(对应于行)。从某种意义上说,这就是代理(你返回的数组)
类似于:
float* Matrix::operator[](int row) // non-const version
{
return m[row];
}
和
const float* Matrix::operator[](int row) const // const overload
{
return m[row];
}
关于c++ - C++/编译器/重载中的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27221482/