1

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

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

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

4

2 回答 2

3

a的[]运算符string返回一个字符,而不是一个字符串。根据情况,您应该实施其中的一两个:

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

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

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

于 2012-08-25T11:06:30.310 回答
1

有些人更喜欢有一个带符号的参数类型operator[],既更类似于内置的 operator[] (它们也支持负索引),也能够检测负值参数(如果你有一个越界检查)。

C++ 编译器用于评估调用内置 operator[] 的类型是ptrdiff_t,因此您有时会发现以下内容

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

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

于 2012-08-25T11:25:32.953 回答