这听起来可能很蠢。但是我的D编程语言有一个奇怪的问题。当我尝试创建这样一个新数组时:
import std.stdio;
void main()
{
char[] variable = "value";
writefln(variable);
}DMD编译器总是给出以下错误:
test.d(5):错误:不能隐式地将类型不变(Char5u)的表达式(“值”)转换为char[]
知道为什么吗?我正在为Ubuntu使用2.014 alpha (可用的这里)。
发布于 2009-02-17 14:24:10
我在指南的数组部分进行搜索,这可能会有所帮助:
http://digitalmars.com/d/2.0/arrays.html#strings
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来自这里。
发布于 2009-02-17 14:43:01
基本上,可以归结为字符串文本存储在内存的只读部分。char[]是“可变字符的可变数组”,如果写入该数组,将生成运行时崩溃。
所以编译器真的在这里保护你。
invariant(char)[]的意思是“一个可变的不变字符数组”,这正是它的意思。
PS:当您不需要它成为char[]时,您可能需要使用auto,如在auto variable = "value"中。让你不用去思考它的类型:)
发布于 2009-03-02 03:23:11
使用auto,不要担心类型是什么:
auto s = "some text";让编译器来考虑类型。
https://stackoverflow.com/questions/557011
复制相似问题