Tra*_*net 0 c++ oop class operator-overloading c++17
考虑一个类SomeClass:
class SomeClass{
public:
// Constructors, other members
float& operator[](const unsigned i);
friend bool operator==(const SomeClass &A, const SomeClass &B);
};
Run Code Online (Sandbox Code Playgroud)
假设这是==该类的运算符重载的方式(不是实际实现,而是过度简化的版本):
bool operator==(const SomeClass &A, const SomeClass &B){
if (A[0] == B[0])
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
这将引发编译器错误,因为重载[]运算符要求实例为 non- 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!
Run Code Online (Sandbox Code Playgroud)
我真的不想const在==操作符的参数中删除,因为操作数在函数内不会改变。处理这个问题的正确方法是什么?
重载operator []以提供两者:
float& operator [](unsigned int i);
float operator [](unsigned int i) const;
Run Code Online (Sandbox Code Playgroud)
对于T复制不便宜的泛型,请使用T const&返回值。实现读/写的一般模式operator []是
T& operator [](index_type i);
T const& operator [](index_type i) const;
Run Code Online (Sandbox Code Playgroud)