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