Arrays 三维程序设计语言字符数组
这听起来可能真的很愚蠢。但是我对D编程语言有一个奇怪的问题。当我尝试创建这样的新阵列时: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(可用)。我在指南的数组部分搜索
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