Heim >Backend-Entwicklung >C++ >Wann leitet „auto' in C 11 einen Wert gegenüber einer Referenz ab?
C 11 „auto“-Semantik
In C 11 ermöglicht das „auto“-Schlüsselwort dem Compiler, den Typ von a automatisch abzuleiten Variable. Das Verständnis der Regeln für diesen Abzug ist entscheidend, wenn Sie bestimmen möchten, ob „auto“ zu einem Wert oder einem Referenztyp führt.
Typabzug für Wert und Referenz
Der Primärtyp Der Grundsatz der Typableitung besteht darin, dass der Typ von „auto“ durch die Art und Weise seiner Deklaration bestimmt wird. Zum Beispiel:
<code class="cpp">int i = 5; auto a1 = i; // value auto &a2 = i; // reference</code>
Im obigen Beispiel wird „a1“ als ganzzahliger Wert abgeleitet, während „a2“ als ganzzahlige Referenz abgeleitet wird.
Beispiele
1. Eine Referenz zurückgeben:
<code class="cpp">const std::shared_ptr<Foo>& get_foo(); auto p = get_foo();</code>
In diesem Fall leitet „auto“ einen Referenztyp ab, weil „get_foo()“ eine konstante Referenz zurückgibt.
2. Statischer Zeiger:
<code class="cpp">static std::shared_ptr<Foo> s_foo; auto sp = s_foo;</code>
Hier leitet „auto“ einen Werttyp ab, da „s_foo“ ein statischer Zeiger ist, der keine Referenz ist.
3. Durchlaufen eines Zeigercontainers:
<code class="cpp">std::vector<std::shared_ptr<Foo>> c; for (auto foo : c) {</code>
In dieser Schleife stellt „auto“ sicher, dass „foo“ als gemeinsamer Zeiger auf Foo abgeleitet wird. Jede Iteration erstellt eine Wertkopie des Zeigers.
Schlussfolgerung
Zusammenfassend sind die Typableitungsregeln für „auto“ in C 11 unkompliziert. Wenn der Initialisierungsausdruck ein Wert ist, leitet „auto“ einen Werttyp ab. Wenn der Initialisierungsausdruck eine Referenz ist, leitet „auto“ einen Referenztyp ab. Das Verständnis dieser Regeln ist für die effektive Nutzung von „Auto“ und die Vermeidung unerwarteten Verhaltens unerlässlich.
Das obige ist der detaillierte Inhalt vonWann leitet „auto' in C 11 einen Wert gegenüber einer Referenz ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!