我已经有自定义字符串类:
#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
类,因为它拥有并复制数据。取而代之的是,您想要一个没有所有权的课程,而是类似的方法。