Gemäß der Spezifikation gehen :
Ein Wert x ist in jedem dieser Fälle einer Variablen vom Typ T ("x ist T zuweisbar") zuzuordnen:
- ...
- x's Typ V und T haben identische zugrundeliegende Typen und mindestens einer von V oder T ist kein benannter Typ.
- ...
Auch zur Definition von "unbenannt":
Ein Typ bestimmt die Menge von Werten und Operationen, die für Werte dieses Typs spezifisch sind. Typen können benannt oder unbenannt sein. Benannte Typen werden durch einen (möglicherweise qualifizierten) Typnamen angegeben; unbenannte Typen werden mit einem Typliteral angegeben, das aus vorhandenen Typen einen neuen Typ zusammensetzt.
Im Wesentlichen können Sie sich einen benannten Typ als einen beliebigen Typ vorstellen, der nur als Bezeichner oder als durch Punkte getrennte Bezeichner dargestellt werden kann. Zum Beispiel foo
oder Foo.Bar
.
In Ihrem Beispiel ordnen Sie immer zwischen Variablen mit demselben zugrunde liegenden Typ zu. Die Frage ist, ob mindestens einer der beteiligten Typen "unbenannt" ist.
In diesem Fall weisen Sie &a{}
, das ist ein *a
(unbenannt), einer Variablen vom benannten Typ b
zu. Das funktioniert. Wenn Sie jedoch a{}
(benannter Typ a
) einer Variablen vom Typ c
zuweisen, wird keiner der Namen unbenannt und Sie erhalten einen Fehler.
Gemäß der Spezifikation im Zuweisbarkeit -Teil a value x is assignable to a variable of type T ("x is assignable to T") ... x's type V and T have identical underlying types and at least one of V or T is not a named type
.
Wert &a{}
ist kein benannter Typ. Es ist ein Zeiger auf a
, bedeutet *a
. Der zugrunde liegende Typ von Wert &a{}
und Typ b
ist *a
, Zeiger auf a
. Daher können wir einer Variable vom Typ &a{}
den Wert b
zuweisen.
Aber der Wert a{}
, dessen Typ a
ist, kann keiner Variablen vom Typ c
zugewiesen werden, da sie keine dieser Bedingungen und ihre zugrunde liegenden Typen ( a
und c
) erfüllt nicht dasselbe.
Wie bereits erwähnt, geht es um die Zuordnungsmöglichkeit unbenannter Typen, nicht um Zeiger.
%Vor%kompiliert.
Tags und Links go