cls*_*udt 5 c++ operator-overloading operators c++11
通常,如何[ ]为读取和写入访问声明类的索引运算符?
我试过类似的东西
/**
* Read index operator.
*/
T& operator[](T u);
/**
* Write index operator
*/
const T& operator[](T u);
Run Code Online (Sandbox Code Playgroud)
这给了我错误
../src/Class.h:44:14: error: 'const T& Class::operator[](T)' cannot be overloaded
../src/Class.h:39:8: error: with 'T& Class::operator[](T)'
Run Code Online (Sandbox Code Playgroud)
Mik*_*our 14
你的可变版本很好:
T& operator[](T u);
Run Code Online (Sandbox Code Playgroud)
但const版本应该是const成员函数以及返回const引用:
const T& operator[](T u) const;
^^^^^
Run Code Online (Sandbox Code Playgroud)
这不仅可以将其与其他重载区分开来,还允许(只读)访问const类的实例.通常,重载的成员函数可以通过它们的参数类型和const/volatile资格来区分,但不能通过它们的返回类型来区分.
您只需要一个可用于读取和写入的重载:
T& operator[](int);
Run Code Online (Sandbox Code Playgroud)
话虽如此,您可能还想要const过载:
const T& operator[](int) const;
Run Code Online (Sandbox Code Playgroud)
这将为const您的类的实例提供只读索引.