2

根据http://dlang.org/statement.html的“Foreach 限制”部分,以下代码

int[] a;
int[] b;
foreach (int i; a) { 
    a = null; // error
    a.length += 10; // error 
    a = b; // error 
}
a = null; // ok

应该错误。

但在使用 2.063.2 或 master 时,它不适合我。

这是回归错误吗?

4

2 回答 2

4

它可能从未作为实际错误实施。我没有看到一个开放的错误,但我不擅长搜索 bugzilla ......不管怎样,我确信规范根本没有实现来实际显示错误,如果你真的这样做,它就会成为未定义的行为。

于 2013-08-27T21:23:48.177 回答
1

在几个地方,D 文档说有些东西是错误的,而编译器实际上并没有对此进行检查。C 和 C++ 可能会使用术语“未定义的行为”而不是“错误”。在 C 和 C++ 中,这样的程序是有效的,你只是不知道它做了什么。在 D 中,它根本不被视为有效程序。

于 2013-08-28T12:18:05.627 回答