按 return 类型重载函数?

Overloading a function by return type?

在 SO 上查看最多的问题之一是处理各种运算符重载的问题。关于括号运算符 operator[] 的重载,我有些不明白。我的问题是关于以下代码:

class X {
        value_type& operator[](index_type idx);
  const value_type& operator[](index_type idx) const;
  // ...
};

此处运算符被重载了两次,一次允许更改成员,另一次不允许。我读到 c++ 不允许 return 类型的函数重载,但这看起来像。 T& 更改为 const T&。谁能给我解释一下这个“重载”到底是什么,为什么会这样?

提前致谢。

PS:如果这是因为第二个 const 关键字将“不可见”this 指针参数更改为 const this 那么我明白了,但是仍然有一个名称练习?

要使重载起作用,函数需要具有不同的签名(return 类型不算)。

在方法中,指向对象的 this 指针也算作隐式(第一个)参数。静态方法当然没有 this 指针,因此可以将它们视为全局函数。

在您的示例中,这两种方法具有不同的参数。 idx 在这两种情况下是相同的,但第一种方法有一个 this 类型的 X* 指针,它是一个变量指针。在第二种方法中,this 指针是常量类型:const X*,因此与第一种方法不同,这就是重载起作用的原因。

return 值对重载无关紧要。如果只有 return 值不同,编译器将不允许重载。

class X {
        value_type& operator[](index_type idx);
  const value_type& operator[](index_type idx) const;
                     // -----------------------^^^^^
                     // This is what makes the overloading possible.
};