D编程语言char数组

use*_*756 7 arrays d dmd

这听起来真的很愚蠢.但我对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)

这里开始.


Fee*_*ure 9

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

所以编译器真的试图在这里保护你.

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

PS:当你不需要它时char[],你可能想要使用auto,如,auto variable = "value".让你不要考虑它的类型:)