Heim >Backend-Entwicklung >C++ >Wann leitet „auto' in C 11 einen Wert gegenüber einer Referenz ab?

Wann leitet „auto' in C 11 einen Wert gegenüber einer Referenz ab?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 08:40:03837Durchsuche

When Does

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn