C 11 „auto“-Typableitung: Referenz vs. Wert auflösen
In C 11 bietet das Schlüsselwort „auto“ eine praktische Möglichkeit um den Typ einer Variablen automatisch abzuleiten. Wenn Sie jedoch „auto“ verwenden, ist es wichtig, die Regeln zu verstehen, die bestimmen, ob es in einen Wert oder eine Referenz aufgelöst wird.
Typabzugsregeln für „auto“:
Die Grundregel ist, dass „auto“ die Deklaration der Variablen selbst interpretiert, nicht den Typ, den sie darstellt. Daher zeigt das folgende Beispiel deutlich, dass „auto“ in einen Wert aufgelöst wird:
<code class="cpp">auto i = v.begin(); // Copy, as begin() returns an iterator by value</code>
In komplexeren Szenarien kann der Unterschied jedoch weniger offensichtlich sein. Betrachten Sie die folgenden Beispiele:
<code class="cpp">const std::shared_ptr<Foo>& get_foo(); auto p = get_foo(); // Copy or reference?</code>
In diesem Fall leitet „auto“ den Typ ab der Rückgabetyp der Funktion get_foo(), der ein Verweis auf einen std::shared_ptr
<code class="cpp">static std::shared_ptr<Foo> s_foo; auto sp = s_foo; // Copy or reference?</code>
Hier leitet „auto“ den Typ aus der Deklaration von s_foo ab, bei dem es sich um ein statisches std::shared_ptr
<code class="cpp">std::vector<std::shared_ptr<Foo>> c; for (auto foo: c) { // Copy for every loop iteration?</code>
In diesem Fall leitet „auto“ den Typ vom Iteratortyp des Vektors ab. Der Iterator gibt std::shared_ptr
Schlussfolgerung:
Die Regel für die Typableitung „auto“ ist unkompliziert: Sie folgt der Deklaration der Variablen selbst. Um eine Referenz aufzulösen, verwenden Sie ein kaufmännisches Und in der Deklaration (auto &ref = ...). Andernfalls leitet „auto“ einen Werttyp ab.
Das obige ist der detaillierte Inhalt vonWie wird bei der Verwendung von „auto' in C 11 bestimmt, ob eine Variable eine Referenz oder ein Wert ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!