我正在尝试在 C++11 中创建我自己的字符串类,但我遇到了一些问题。 将我的类与 std::string 类进行比较,我不知道如何使用
std::string.at(int) = 'a';方法/重载。
我在自己的类中创建了 at(int) 方法:
int at(int index)
{
if(index <0 || index > size-1) {throw std::out_of_range("Error, index out of range");}
return data[index];
}
如果我只使用它,效果很好:
MyString.at(2);
在主文件中:
MyString = "Hello world!"; //Works fine!
MyString.at(2)='a'; //Gives, Error: expressino must be a modifiable Ivalue.
任何帮助都将非常有用,谢谢!
最佳答案
至少您的 at()
成员函数之一需要返回对 char
的非常量引用。像这样:
char &at(std::size_t idx)
{
return data[idx];
}
定义一个 const
版本的函数也是有益的:
const char &at(std::size_t idx) const
{
return data[idx];
}
另请注意 std::size_t
的使用(这是一种保证足够大以表示任何大小的无符号类型)。这样您可以提高可移植性,并且不必检查负索引。
关于C++运算符重载,我自己的字符串类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471392/