Lassen Sie uns sagen, dass ich eine einfache C++ Klasse, die ein eigenes Element und ein Getter enthält:Schlüsselwort auto Verhalten mit Referenzen
class MyClass
{
private:
double m_testValue = 1;
public:
double& getTestValue(){return m_testValue;}
}
Lassen Sie uns jetzt sagen, ich will den Getter nennen meine Referenz zu bekommen und diesen Wert bearbeiten (und das Drucken vor/nach Wert)
auto testVal = myClassInstance.getTestValue();
std::cout << myClassInstance.getTestValue() << std::endl;
std::cout << testVal << std::endl;
testVal = 3;
std::cout << myClassInstance.getTestValue() << std::endl;
std::cout << testVal << std::endl;
Der Ausgang ist
1
1
1
3
Dies ist nicht genau w Hut ich erwartet, da offenbar m_testValue nicht bearbeitet wurde. Ja, wenn ich ersetzen Auto mit Doppel &:
double& testVal = myClassInstance.getTestValue();
std::cout << myClassInstance.getTestValue() << std::endl;
std::cout << testVal << std::endl;
testVal = 3;
std::cout << myClassInstance.getTestValue() << std::endl;
std::cout << testVal << std::endl;
ich
1
1
3
3
Was ist das, was ich will. So ist die Frage: Ist dies das erwartete Verhalten des Schlüsselwortes auto
oder ist es ein Fehler? Wenn dies erwartet wird, was ist der Grund für dieses Verhalten? Ist es eine technische Einschränkung? Wenn es von Entwurf und warum?
'Auto' funktioniert genau wie Vorlagentyp Abzug, mit einer nicht verwandten Ausnahme. – chris
Beachten Sie, dass Sie in C++ 14 mit 'declltype (auto)' das gewünschte Verhalten erhalten können. – TartanLlama
In diesem Kommentar geht es nicht um Ihr Problem. In deinem Code gibt es ein Problem mit dem Design: Eine Methode muss const 'const double & getTestValue() const noexcept {return m_testValue;}' sein. In diesem speziellen Fall vielleicht Rückkehr durch Referenz es ist irrilvant –