Arrays 三维程序设计语言字符数组

Arrays 三维程序设计语言字符数组,arrays,d,dmd,Arrays,D,Dmd,这听起来可能真的很愚蠢。但是我对D编程语言有一个奇怪的问题。当我尝试创建这样的新阵列时: import std.stdio; void main() { char[] variable = "value"; writefln(variable); } DMD编译器总是给我以下错误: test.d(5):错误:无法隐式 转换类型的表达式(“值”) 不变(char[5u])到char[] 知道为什么吗?我正在Ubuntu上使用2.014 alpha(可用)。我在指南的数组部分搜索

这听起来可能真的很愚蠢。但是我对D编程语言有一个奇怪的问题。当我尝试创建这样的新阵列时:

import std.stdio;

void main()
{
    char[] variable = "value";
    writefln(variable);
}
DMD编译器总是给我以下错误:

test.d(5):错误:无法隐式 转换类型的表达式(“值”) 不变(char[5u])到char[]


知道为什么吗?我正在Ubuntu上使用2.014 alpha(可用)。

我在指南的数组部分搜索,这可能会有帮助:


从。

基本上,它归结为字符串文本存储在内存的只读部分
char[]
是“可变字符的可变数组”,如果写入,将生成运行时崩溃

所以编译器真的是想在这里保护你

invariant(char)[]
的意思是“一个可变的不变字符数组”,这正是它的本意


PS:当您不需要它是
char[]
时,您可能需要使用
auto
,如
auto variable=“value”
。使您不必考虑它的类型:)

使用auto,不必担心它的类型是什么:

auto s = "some text";

让编译器担心类型

D语言有两个主要版本。一般来说,它们是互不兼容的,尽管可以用这两种语言编写代码进行编译

D1是您提供的代码似乎是用它编写的。它没有不可变数组的概念,因此这是可行的

D2是您试图编译它的版本号,因此以2开头的编译器版本号。D2的一个主要特性是常量和不可变/不变数据引用的概念

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中的字符串文字被归类为不可变数据,因此不能分配给char[],而只能分配给
const(char)[
invariant(char)[
(或wchar或dchar等价物)


string
invariant(char)[
的别名,您可能想使用它以方便使用或与D1兼容。

非常感谢,我应该亲自查看一下。我不完全理解可变和不可变的东西,但也不是真的。为什么我不能简单地给一个字符数组分配一个不可变的字符序列呢?因为你的变量是一个可变字符数组指针,也就是说,一个指向可变字符数组的指针,你试图让它指向一个不可变字符数组。也许值得一读,那页已经过时了。查看ftp.digitalmars.com以了解DMD的最新版本。不变量一词已被替换为不可变,在D2.XT的稳定版本中不存在。感谢您提供非常清晰和简单的解释,单词不变量已经被不可变的替换,在D2.XI的稳定版本中不存在了,除非DigalMARS.COM/D/2.0/COST3.HTML似乎已经固定了。根据大多数其他网页,这个词仍然是不变的。(我也认为你会发现不变式永远是类不变式的词,但这只是一个旁白。)
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