假设我自己设计了一个String类,我想重载operator []函数,以下是选择:
String operator[](const size_t index);
String& operator[](const size_t index);
const String& operator[](const size_t index) const;
const,非const和引用返回类型的任何其他组合。
答案 0 :(得分:3)
[]
的{{1}}运算符返回一个字符,而不是字符串。根据具体情况,您应该实施其中一个或两个:
string
第一个产生无法修改的引用。如果你的字符串是不可变的,那就是你所需要的。
第二个产生可以修改的引用。您可以使用它来实现聪明的东西,例如复制修改和引用计数。
答案 1 :(得分:1)
有些人更喜欢operator[]
的签名参数类型,两者都更类似于内置运算符[](它们也支持负指数),并且还能够检测负值参数(在你有一个越界检查的情况。)
C ++编译器用于评估调用内置运算符[]的类型是ptrdiff_t
,因此您有时会找到以下内容
char &operator[](ptrdiff_t index);
char operator[](ptrdiff_t index) const;
我通常只使用普通的int
参数类型。