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

What should I choose from the below functions

本文关键字:选择 什么 功能 我应该      更新时间:2023-10-16

假设我自己设计了一个String类,并且我想重载运算符[]函数,以下是选项:

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

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

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

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

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

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

有些人更喜欢operator[]的签名参数类型,这既是为了更类似于内置运算符[](他们也支持负索引),也是为了能够检测负值参数(以防进行越界检查)。

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

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

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