请教 这个是不是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 没关系,跟类型有关系
Global site tag (gtag.js) - Google Analytics