按 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.
};
在 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.
};