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