Dies kompiliert:
%Vor%Das tut nicht:
%Vor%Fehler CS0030: Typ 'String' kann nicht in 'char *' konvertiert werden
Ich kann den Spot in der c # -Spezifikation nicht finden, was die erste Möglichkeit erlaubt Syntax aber verbieten die zweite. Kannst du helfen und aufzeigen, worüber das gesprochen wird?
Es ist in Abschnitt 18.6 der Spezifikation - die fixed
Anweisung.
Die relevanten Produktionen sind:
feste Anweisung :
fixed (
Zeigertyp Deklaratoren für feste Zeiger)
eingebettete AnweisungFixed-Pointer-Deklarator :
Bezeichner=
Fixed-Zeiger-InitialisiererFixed-Zeiger-Initialisierer :
&
Variable-Referenz
Ausdruck
Sie versuchen, die Ausdruck Version zu verwenden. Nun, während nicht eine normale "Umwandlung als Ausdruck * von string
nach char *
ist, ruft die Spezifikation den Fall string
auf und sagt, dass ein Fixed-Pointer-Initialisierer das kann sei:
Ein Ausdruck vom Typ
string
, vorausgesetzt, der Typchar*
ist implizit in den in der festen Anweisung angegebenen Zeigertyp konvertierbar. In diesem Fall berechnet der Initialisierer die Adresse des ersten Zeichens in der Zeichenfolge, und die gesamte Zeichenfolge bleibt garantiert für die Dauer der festen Anweisung an einer festen Adresse. Das Verhalten der festen Anweisung ist implementierungsdefiniert, wenn der Zeichenfolgenausdrucknull
ist.
Obwohl Sie so aussehen , als ob Sie nur eine normale Variablendeklaration durchführen und eine implizite Konvertierung von string
in char *
verwenden, verwenden Sie wirklich einen speziellen Fall von was der Ausdruck in einem Fixed-Pointer-Initializer darf sein.