D Programmiersprache Char Arrays

7

Das hört sich vielleicht wirklich dumm an. aber ich habe ein seltsames Problem mit der D-Programmiersprache. Wenn ich versuche, ein neues Array wie folgt zu erstellen:

%Vor%

Der DMD-Compiler gibt mir immer diesen Fehler:

  

test.d (5): Fehler: Kann nicht implizit   den Ausdruck ("Wert") des Typs konvertieren   invariant (char [5u]) zu char []

Irgendeine Idee warum? Ich benutze das 2.014 alpha (verfügbar hier ) für Ubuntu.

    
user32756 17.02.2009, 14:19
quelle

4 Antworten

9

Im Grunde geht es darum, dass String-Literale in einem schreibgeschützten Teil des Speichers gespeichert werden. char[] ist "ein veränderbares Array von veränderbaren Zeichen" , das, falls geschrieben, einen Laufzeit-Crash erzeugen würde.

Der Compiler versucht also wirklich, Sie hier zu schützen.

invariant(char)[] bedeutet "ein veränderbares Array invarianter Zeichen" , was genau das ist.

PS : Wenn Sie nicht als char[] verwenden möchten, können Sie auto verwenden, wie in auto variable = "value" . Es befreit dich davon, über seinen Typ nachzudenken:)

    
FeepingCreature 17.02.2009 14:43
quelle
4

benutze auto und mach dir keine Sorgen, was der Typ ist:

%Vor%

Lassen Sie den Compiler sich Gedanken über den Typ machen.

    
hasen 02.03.2009 03:23
quelle
4

Es gibt zwei Hauptversionen der D-Sprache. Sie sind im Allgemeinen gegenseitig inkompatibel, obwohl Code in beide kompiliert werden kann.

D1 ist, was der von Ihnen mitgelieferte Code zu sein scheint. Es hat kein Konzept von unveränderlichen Arrays, daher funktioniert das.

D2 ist, was Sie versuchen, es zu kompilieren, daher die 2 die Compiler-Versionsnummer beginnt. Eines der wichtigsten D2-spezifischen Merkmale ist dieses Konzept von const und unveränderlichen / invarianten Datenreferenzen.

%Vor%

String-Literale in D2 werden als unveränderliche Daten klassifiziert und können daher keinem char [] zugeordnet werden, sondern nur einem const(char)[] oder invariant(char)[] (oder wchar oder dchar Äquivalenten).

string ist ein Alias ​​von invariant(char)[] , den Sie entweder zur Vereinfachung oder zur D1-Kompatibilität verwenden möchten.

    
Stewart 18.08.2009 21:44
quelle

Tags und Links