请教 这个是不是DMD的bug呢?
tomqyp
2007-11-23
void main() { char[] delegate() dfoo; char[] foo() {return "";}; //dfoo = delegate(){return "";}; //这里会出错 说这个委托是int delegate()类型 dfoo = &foo; //同样的函数这里就OK 为什么啊? } |
|
oldrev
2007-11-23
编译器这里确实有点不一致,但是你的返回字符串常量的做法本身就是错误的。一个是 char[] 一个是 char[0],类型不同,改成 return "".dup; 就行了。
PS: 这就是为什么需要 const/invariant/final 的原因。 |
|
tomqyp
2007-11-23
谢谢 明白了
|
|
sw2wolf
2007-11-24
oldrev 写道 编译器这里确实有点不一致,但是你的返回字符串常量的做法本身就是错误的。一个是 char[] 一个是 char[0],类型不同,改成 return "".dup; 就行了。
PS: 这就是为什么需要 const/invariant/final 的原因。 void main() { char[] delegate() dfoo; char[] foo() {return "";}; dfoo = delegate(){return cast(char[])"";}; dfoo = &foo; } 这样也可以, 这与const/invariant/final有关系吗?难道cast也会dup ... |
|
oldrev
2007-11-24
跟 const 没关系,跟类型有关系
|