C++从左到右重载[]

Ada*_* Mo 3 c++ string class operator-overloading

我正在考虑如何从左侧和右侧重载[]以设置为函数并获取我正在处理的自定义字符串类.例如:

char x= objAr[1]; //get
objAr[2]='a'; //set
Run Code Online (Sandbox Code Playgroud)

字符串类基本上如下所示:

class String {
private:
    char* data;
    unsigned int dataSize;
public:
    String();
    String(char);
    String(char*);
    String(String&);
    ~String();
    char* getData();
    int getSize();
};
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 8

如果您始终拥有备份数据,则可以返回参考:

char& String::operator[] (size_t idx)
{ return data[idx]; }

char String::operator[] (size_t idx) const
{ return data[idx]; }
Run Code Online (Sandbox Code Playgroud)

在你的情况下,这应该是足够的.但是,如果由于某种原因这不是选项(例如,如果数据不总是正确类型),您还可以返回代理对象:

class String
{
  void setChar(size_t idx, char c);
  char getChar(size_t idx);

  class CharProxy
  {
    size_t idx;
    String *str;
  public:
    operator char() const { return str->getChar(idx); }
    void operator= (char c) { str->setChar(idx, c); }
  };

public:
  CharProxy operator[] (size_t idx)
  { return CharProxy{idx, this}; }

  const CharProxy operator[] (size_t idx) const
  { return CharProxy{idx, this}; }
};
Run Code Online (Sandbox Code Playgroud)

这还可以让您通过写时复制执行隐式数据共享等操作.