如何使操作员返回引用字符串元素



我已经有自定义字符串类:

#include <string.h>
class String
{
    char * str;
    int n;
public:
    explicit String(const char* s)
    {
        n = strlen(s);
        str = new char[n + 1];
        strcpy(str, s);
        printf("Class constructorn");
    }
    ~String() { delete[] str; printf("Class destructorn"); };
    const char& operator [] (int i) const
    {
        return (i >= 0 && i < n) ? this->str[i] : 0;
    }
}

我已经实现了返回 const char的索引运算符,但是我想拥有一个索引运算符,它返回引用字符串元素。我知道可以使用 friend来完成它,但是我的书写不成功。

您能给我一些有关如何解决我的问题的建议吗?

请看一下http://en.cppreference.com/w/cpp/string/basic_string_view。您可以使用它,也可以自己定义与std :: string和您的字符串类相似的类似物。

那么您将拥有

string_view operator[] (size_t i) const
{
    if(i >= n) { return string_view(nullptr, 0); }
    return string_view(str[i], n - i);
}

请注意,您不想使用String类,因为它拥有并复制数据。取而代之的是,您想要一个没有所有权的课程,而是类似的方法。

最新更新