为什么不能将下标运算符(operator[])重载为友元函数?
Why isn't it possible to overload the subscript operator (operator[]) as a friend function?
为什么我们不能使用友元函数重载下标运算符
并非所有运算符都可以重载。对于那些可能超载的人,无论他们是否是非成员,都有规则。有关详细信息,请参阅https://en.cppreference.com/w/cpp/language/operators.
只能作为成员重载的运算符有=
、()
、[]
和->
。
让我们为从C派生的语言添加重载。你知道内置运算符是对称的吗?对于原始数组,a[i] == i[a]
。这是一个新兴的属性,可能很可爱,但对伟大的代码来说几乎没有好处。
所以,限制我们的过载只让我们的";容器对象";左边?许多人会答应。同样,表达式的左侧总是作为成员查找的this
。
现在,如果我们只想允许lhs上的对象,那么选择很简单:只允许将运算符定义为成员。出于类似的原因,operator=
也是一个仅限成员的运算符,因为将分配给的对象只有在左边才有意义(对于语言设计器(。
相关文章:
- 运算符重载在 C++ 中使用友元函数
- C++模板内部类友元运算符重载
- C++ I/O 流重载:如何实现同一标头中相同 4 个 I/O 函数的 3 个不同类的友元重载?
- 不能在友元函数中使用重载运算符
- 使用shared_ptr向量重载 ostream 友元运算符
- 使用模板类重载的友元运算符
- 尝试重载模板类友元<<运算符时出错
- 使用友元函数重载新运算符
- C++重载友元函数无法访问私有成员
- 为什么重载运算符时需要友元关键字<<
- 我的运算符重载友元函数无法理解模板类型 T 的问题
- C++以友元身份重载 ostream 运算符会导致错误:变量在此上下文中是私有的
- 运算符重载函数作为友元
- 重载+运算符问题与其他类中的友元函数混合
- C++用参数重载友元类函数参数
- 将部分指定的模板化矩阵乘法运算符重载函数声明为类外的友元
- C++ <<运算符重载,无友元功能
- 继承:重用友元类中的运算符重载
- 在模板类中重载友元运算符方法
- 在模板类中创建重载友元运算符的模板