[疑难] 极度郁闷的问题

hohoyeh 2007-09-23
以下代码可以编译通过:

import std.stdio;

int main()  


char[5] a = "hello";
writefln("%s",a);
return 1;
}

但是如果我改成
char[] a = "hello";
为什么就不行??

D:\DProjects\HelloDLang\Main\hello.d(56): Error: cannot implicitly convert expression ("hello") of type invariant char[5u] to char[]


char[] 不是动态数组吗??



我用的是dmd2.004 + poseidon

oldrev 2007-09-23
错误信息很明确,"hello" 的类型是 invariant char[5],而不是 char[]
可以改成 const(char)[] a = "hello";
或者用标准库定义的 alias: string a = "hello";
hohoyeh 2007-09-23
谢谢了。我也看明白了错误信息,只是不理解为什么不能隐式转换它。动态数组的特性就应该支持才对撒。
Colorful 2007-09-23
静态数组的确可以隐式转换成动态数组,但是对于字符串常量来说,应当区别对待,因为它的类型是const(char)[]。
oldrev 2007-09-23
2.0 的 constness 还在争论,作者也承认设计有问题,不推荐学习 2.0
tomqyp 2007-09-23
应该在圈子的D说明一下2.0和1.0的区别,要不然许多人都会习惯性的使用版本号比较高的.
Global site tag (gtag.js) - Google Analytics