我应该从以下功能中选择什么

时间:2012-08-25 11:01:47

标签: c++ operator-overloading

假设我自己设计了一个String类,我想重载operator []函数,以下是选择:

String operator[](const size_t index);
String& operator[](const size_t index);
const String& operator[](const size_t index) const;

const,非const和引用返回类型的任何其他组合。

2 个答案:

答案 0 :(得分:3)

[]的{​​{1}}运算符返回一个字符,而不是字符串。根据具体情况,您应该实施其中一个或两个:

string

第一个产生无法修改的引用。如果你的字符串是不可变的,那就是你所需要的。

第二个产生可以修改的引用。您可以使用它来实现聪明的东西,例如复制修改和引用计数。

答案 1 :(得分:1)

有些人更喜欢operator[]的签名参数类型,两者都更类似于内置运算符[](它们也支持负指数),并且还能够检测负值参数(在你有一个越界检查的情况。)

C ++编译器用于评估调用内置运算符[]的类型是ptrdiff_t,因此您有时会找到以下内容

char &operator[](ptrdiff_t index);
char operator[](ptrdiff_t index) const;

我通常只使用普通的int参数类型。