質問

すっか.もう奇妙な問題のプログラミング言語.きるような新しい配列のようになります:

import std.stdio;

void main()
{
    char[] variable = "value";
    writefln(variable);
}

のDMDコンパイラは常に与えてくれるこのエラー:

テストです。d(5):エラー:できない暗黙のうちに に変換す表現("value"の型 不変式(char[5u])をchar[]

うのですが?私が使っているの2.014アルファ(利用可能 こちらの)をUbuntu.

役に立ちましたか?

解決

私は、これが役立つことがあり、ガイドのアレイ部の周囲に探索した

文字列は文字の配列です。文字列リテラルは、文字配列を記述するだけの簡単な方法です。文字列リテラルは、(読み取り専用)不変です。

char[] str1 = "abc";                // error, "abc" is not mutable
char[] str2 = "abc".dup;            // ok, make mutable copy
invariant(char)[] str3 = "abc";     // ok
invariant(char)[] str4 = str1;      // error, str4 is not mutable
invariant(char)[] str5 = str1.idup; // ok, make invariant copy

をrel="noreferrer"> href="http://www.digitalmars.com/d/2.0/arrays.html"ます。

他のヒント

基本的には、つまりは、文字列リテラルに保存され読み取り専用部のメモリを消費します。 char[]"変更可能な配列の変更可能な文字", い場合に書き込まれ、実行時ンダリングする能力があります。

そのコンパイラはんを保護しようとしています。

invariant(char)[] 手段 "変更可能な配列の不変式の文字", そうです。

PS:ない場合 必要 できる char[], するために使用 auto, として、 auto variable = "value".解放されますから考えると、そのタイプ:)

autoを使用すると、タイプが何であるかを心配しないでください。

auto s = "some text";

タイプに関するコンパイラ心配をしましょう。

D言語には主に2つのバージョンがあります。コードは両方でコンパイルするように記述することもできる。

これらは、一般に、互いに相互に互換性がありません

D1は、あなたが提供したコードが書き込まれているようだものです。それは不変の配列の概念がありません、したがって、これは動作します。

D2は、あなたがそれ故に2は、コンパイラのバージョン番号を開始する、としてそれをコンパイルしようとしているものです。メインD2固有の特徴の一つは、constの不変/不変データ参照のこの概念です。

char[] text;              // mutable data
const(char)[] ctext;      // data may be mutable or immutable - but either way,
                          // it will not be changed through this reference
invariant(char)[] itext;  // immutable data

D2で文字列リテラルは、不変データとして分類され、従ってチャーに割り当てることができない[]が、唯一const(char)[]又はinvariant(char)[](またはwchar文字又はDCHAR当量)。

stringあなたは便宜上またはD1の互換性のためにいずれかを使用することをお勧めしますinvariant(char)[]の別名です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top