In C 11 bietet das Schlüsselwort auto eine praktische Möglichkeit, den Typ einer Variablen basierend auf ihrem Initialisierer automatisch abzuleiten . Es sind jedoch bestimmte Punkte zu beachten, ob auto in einen Wert oder eine Referenz aufgelöst wird.
Die Regel ist einfach: Sie hängt davon ab, wie die Variable deklariert wird.
<code class="cpp">int i = 5; auto a1 = i; // value auto &a2 = i; // reference</code>
Im ersten Fall ist a1 ein Wert, da er nicht als Referenz deklariert wurde. Im zweiten Fall ist a2 eine Referenz, weil sie explizit als solche deklariert wurde.
Wenden wir diese Regel auf die von Ihnen angegebenen Beispiele an:
Der folgende Code demonstriert dieses Verhalten mithilfe von Template-Metaprogrammierung:
<code class="cpp">#include <typeinfo> #include <iostream> template< typename T > struct A { static void foo(){ std::cout << "value" << std::endl; } }; template< typename T > struct A< T&> { static void foo(){ std::cout << "reference" << std::endl; } }; float& bar() { static float t=5.5; return t; } int main() { int i = 5; int &r = i; auto a1 = i; auto a2 = r; auto a3 = bar(); A<decltype(i)>::foo(); // value A<decltype(r)>::foo(); // reference A<decltype(a1)>::foo(); // value A<decltype(a2)>::foo(); // value A<decltype(bar())>::foo(); // reference A<decltype(a3)>::foo(); // value }</code>
Ausgabe:
value reference value value reference value
Dies bestätigt, dass der Typ von Auto durch seine Deklaration und nicht durch den Typ seines Initialisierers bestimmt wird.
Das obige ist der detaillierte Inhalt vonWann leitet „auto' in C 11 einen Wert oder eine Referenz ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!