为什么不能将下标运算符(operator[])重载为友元函数?

Why isn't it possible to overload the subscript operator (operator[]) as a friend function?

本文关键字:重载 友元 函数 不能 下标 运算符 operator 为什么      更新时间:2024-09-29

为什么我们不能使用友元函数重载下标运算符

并非所有运算符都可以重载。对于那些可能超载的人,无论他们是否是非成员,都有规则。有关详细信息,请参阅https://en.cppreference.com/w/cpp/language/operators.

只能作为成员重载的运算符有=()[]->

让我们为从C派生的语言添加重载。你知道内置运算符是对称的吗?对于原始数组,a[i] == i[a]。这是一个新兴的属性,可能很可爱,但对伟大的代码来说几乎没有好处。

所以,限制我们的过载只让我们的";容器对象";左边?许多人会答应。同样,表达式的左侧总是作为成员查找的this

现在,如果我们只想允许lhs上的对象,那么选择很简单:只允许将运算符定义为成员。出于类似的原因,operator=也是一个仅限成员的运算符,因为将分配给的对象只有在左边才有意义(对于语言设计器(。