这听起来真的很愚蠢.但我对D编程语言有一个奇怪的问题.当我尝试创建这样的新数组时:
import std.stdio; void main() { char[] variable = "value"; writefln(variable); }
DMD编译器总是给我这个错误:
test.d(5):错误:无法隐式转换类型为invariant(char [5u])的表达式("value")为char []
知道为什么吗?我正在为Ubuntu 使用2.014 alpha(可在此处获得).
我正在搜索指南的数组部分,这可能会有所帮助:
字符串是一个字符数组.字符串文字只是编写字符数组的简单方法.字符串文字是不可变的(只读).
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
从这里开始.
基本上,它归结为字符串文字存储在内存的只读部分.char[]
是"可变字符的可变数组",如果写入,将生成运行时崩溃.
所以编译器真的试图在这里保护你.
invariant(char)[]
意思是"一个可变数组的不变字符",这正是它的本质.
PS:当你不需要它时char[]
,你可能想要使用auto
,如,auto variable = "value"
.让你不要考虑它的类型:)