是否有可能重載一個運算符返回一個字符串而不是類類型?重載操作符返回類型
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