如何解决如何重载[]运算符以支持其他函数中的赋值和const参数?
考虑一个类SomeClass
:
class SomeClass{
public:
// Constructors,other members
float& operator[](const unsigned i);
friend bool operator==(const SomeClass &A,const SomeClass &B);
};
假设这是此类==
运算符的重载方式(不是实际的实现,而是过于简化的版本):
bool operator==(const SomeClass &A,const SomeClass &B){
if (A[0] == B[0])
return true;
return false;
}
这将引发编译器错误,因为重载的[]
运算符要求实例非const
。但是,如果我更改[]
运算符的定义以允许const
实例,我将无法再进行赋值:
// ASSUMING: const float& operator[](const unsigned i) const;
SomeClass a;
a[0] = 0; // error,because the return value of [] is a reference to const!
我真的不想在const
运算符的参数中删除==
,因为操作数在函数内不会改变。处理此问题的正确方法是什么?
解决方法
重载operator []
可以同时提供:
float& operator [](unsigned int i);
float operator [](unsigned int i) const;
对于不便宜的通用T
,请使用T const&
返回值。实现读/写operator []
的一般模式是
T& operator [](index_type i);
T const& operator [](index_type i) const;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。