是否有可能重载一个运算符返回一个字符串而不是类类型?重载操作符返回类型
string operator++() {
index++;
if (index > num_atts) {
index = 0;
}
string ret = att_names[index];
return ret;
}
是否有可能重载一个运算符返回一个字符串而不是类类型?重载操作符返回类型
string operator++() {
index++;
if (index > num_atts) {
index = 0;
}
string ret = att_names[index];
return ret;
}
您可以返回任何您喜欢的类型,就像您编写的任何其他函数一样。但是就像任何其他函数一样,你不能返回一个指向即将超出范围的本地堆栈变量的指针,这是未定义的行为。要解决这个问题,最简单的事情就是简单地返回string
,是这样的:
std::string operator++() {
// ...
return ret;
}
谢谢,纠正之后我发布了这个问题:) – manatttta
该代码对语法没有错误。但是,它在语义上有至关重要的错误。
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字符串,并将其返回。ret
被销毁,并且它也销毁c字符串,因为该c字符串的所有者是ret
。准确地说,“指向被破坏的对象”。 – Greg
您有[未定义的行为](http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope)。返回一个'std :: string'。 – chris
您可以返回任何你喜欢的类型。但是,您的上述代码表现出未定义的行为。 –
为什么你认为这是不可能的?你可以回报你想要的任何东西。还有heed @ chris的评论 – EdChum