如何使操作符返回对string元素的引用

时间:2017-03-10 09:41:03

标签: c++ string

我有自定义字符串类:

#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 constructor\n");
    }
    ~String() { delete[] str; printf("Class destructor\n"); };
    const char& operator [] (int i) const
    {
        return (i >= 0 && i < n) ? this->str[i] : 0;
    }
}

我已经实现了返回const char的索引操作符,但是我希望有一个索引操作符,它返回对string元素的引用。我知道它可以使用friend来完成,但我的尝试是写它不成功。

你能就我的问题如何解决提出一些建议吗?

1 个答案:

答案 0 :(得分:1)

看看http://en.cppreference.com/w/cpp/string/basic_string_view。您可以使用它,也可以为自己定义类似于std :: string和String类的模拟。

然后你会

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

请注意,您想要使用您的String类,因为它拥有并复制数据。相反,你想要一个没有所有权但类似方法的类。