template<class T>
class Array2D {
public:
  class Array1D {
  public:
    T& operator[](int index);
    const T& operator[](int index) const;
    ...
  };

  Array1D operator[](int index); // why not return Array1D&
  const Array1D operator[](int index) const; // why not return Array1D&
  ...
};

上面的代码用于模拟一个名为Array2D的二维数组。
问题是,为什么我们应该返回Array1D而不是Array1D&?

谢谢

最佳答案

大概看起来,它与我在previous answer中发布的3D矩阵类非常相似。如果是这样,则Array1D只是一个代理对象-只是数组/矩阵中某个位置的临时持有者,供下一级的operator []使用以获取元素的位置。在这种情况下,1)代理对象是轻量级的,并且复制成本低,因此返回引用最多不会产生很大的游戏乐趣; 2)该对象通常仅作为临时对象创建(事实上,可能没有其他方法可以创建)创建一个),因此尝试使用引用可能/将/将导致悬挂的引用。换句话说,返回引用只会增加问题,而不会提高效率。

10-01 17:00