Konvertieren von String in Pointer-Syntax

8

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?

    
Andrew Savinykh 24.09.2015, 19:50
quelle

1 Antwort

7

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 Anweisung

     

Fixed-Pointer-Deklarator :
   Bezeichner = Fixed-Zeiger-Initialisierer

     

Fixed-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 Typ char* 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 Zeichenfolgenausdruck null 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.

    
Jon Skeet 24.09.2015, 19:58
quelle

Tags und Links