Heim  >  Artikel  >  Backend-Entwicklung  >  Wie bestimmt „auto“ den Wert im Vergleich zu den Referenztypen in C 11?

Wie bestimmt „auto“ den Wert im Vergleich zu den Referenztypen in C 11?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 07:53:31143Durchsuche

How Does

Typdeduktionssemantik von „auto“ in C 11

In C 11 leitet das Schlüsselwort „auto“ den Typ einer Variablen ab der Typ seines Initialisierers. Die Bestimmung, ob „auto“ in einen Wert oder eine Referenz aufgelöst wird, kann jedoch manchmal nicht eindeutig sein.

Wert vs. Referenz

Die Schlüsselregel für die Typableitung mit „auto " bedeutet, dass der abgeleitete Typ dem deklarierten Typ entspricht.

  • Wenn der deklarierte Typ ein Werttyp ist, wird „auto“ in einen Wert aufgelöst.
  • Wenn der deklarierte Typ ist ein Referenztyp, „auto“ wird in eine Referenz aufgelöst.

Beispiele

  • auto i = v.begin(); – Da v.begin() einen Iterator nach Wert zurückgibt, wird „auto“ in einen Wert aufgelöst.
  • const std::shared_ptr& get_foo(); – Der Typ der Funktion ist eine Referenz, daher wird „auto“ in eine Referenz aufgelöst.
  • static std::shared_ptr s_foo; – Der Typ der Variablen ist ein Zeiger, daher wird „auto“ in einen Wert aufgelöst.
  • std::vector> C; - Der Typ des Containers ist ein Vektor von Zeigern, daher wird „auto“ in einen Wert aufgelöst.

Typabzug

Das folgende Beispiel demonstriert dies Typabzugsverhalten:

<code class="cpp">int i = 5;
auto a1 = i;    // value
auto &a2 = i;  // reference</code>

In diesem Beispiel ist „a1“ vom Typ int (Wert), während „a2“ vom Typ int& (Referenz) ist.

Fazit

Das Verständnis der Typableitungssemantik von „auto“ ist entscheidend, um korrekten und effizienten C-Code zu schreiben. Durch die Einhaltung der Regel der „automatischen“ Auflösung in den deklarierten Typ können Entwickler Variablentypen genau ableiten und die Vorteile dieser Funktion nutzen.

Das obige ist der detaillierte Inhalt vonWie bestimmt „auto“ den Wert im Vergleich zu den Referenztypen in C 11?. 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