diese 2 Funktionen gegeben, die ändern und geben einen String:Was garantiert, dass die überladene nicht-konstante Methode aufgerufen wird?
// modify the original string, and for convenience return a reference to it
std::string &modify(std::string &str)
{
// ...do something here to modify the string...
return str;
}
// make a copy of the string before modifying it
std::string modify(const std::string &str)
{
std::string s(str);
return modify(s); // could this not call the "const" version again?
}
Dieser Code funktioniert für mich GCC g ++ verwenden, aber ich verstehe nicht, warum/wie. Ich würde mir Sorgen machen, dass die zweite Funktion sich selbst nennen würde und mich mit einer außer Kontrolle geratenen Rekursion zurücklassen würde, bis der Stack erschöpft ist. Funktioniert das garantiert?
Dies ist Endrekursion, am wahrscheinlichsten. Ich bin mir nicht sicher, ob die Semantik, einen const-ref-Aufruf in eine Schleife zu verwandeln, also keine Antwort zu posten, sondern die Tail-Rekursion nachschlägt und Sie mehr Informationen finden. – ssube
@peachykeen: Nein, es ist überhaupt keine Rekursion. –
Erwägen Sie, einen Titel auszuwählen, der die Frage besser fokussiert - z. "Was garantiert, dass die überladene nicht-konstante Methode aufgerufen wird?" – user2246674