是否可以重载一个返回字符串而不是类类型的操作符?
string operator++() {
index++;
if (index > num_atts) {
index = 0;
}
string ret = att_names[index];
return ret;
}
答案 0 :(得分:1)
该代码在语法上没有错误。但是,它在语义上存在严重错误。
const char *operator++() {
index++;
if (index > num_atts) {
index = 0;
}
string ret = att_names[index]; // 1
return ret.c_str(); // 2 & 3
} // 4
ret
对象ret.c_str()
。 ret
对象为您创建c-string,并将其返回。ret
被销毁,它也会销毁c-string,因为该c-string的所有者是ret
。答案 1 :(得分:0)
您可以返回任何您喜欢的类型,就像您编写的任何其他功能一样。但就像任何其他函数一样,您无法返回指向即将超出范围的本地堆栈变量的指针,即未定义的行为。最简单的方法是简单地返回string
,例如:
std::string operator++() {
// ...
return ret;
}