Tag: d2

D的语法真的是上下文吗?

我已经在几个月前在D新闻组上发布了这个消息,但是由于某种原因,答案从来没有真正让我信服,所以我想我会在这里问。 D的语法显然是上下文无关的 。 但是,C ++的语法不是(即使没有macros)。 ( 请仔细阅读! ) 现在被授予, 我对编译器,词法分析器和parsing器一无所知 (正式)。 我所知道的是从我在网上学到的东西。 以下是我所了解的关于上下文的一些(我相信),用不太专业的术语: 语言的语法是上下文无关的, 当且仅当你总是可以理解给定代码段的含义(尽pipe不一定是确切的行为),而不需要在其他地方“看”。 或者,更不严格的是: 如果我需要的话,语法不能是上下文无关的,我只是通过查看它不能告诉expression式的types。 因此,例如,C ++由于confusing<sizeof(x)>::q < 3 > (2)的含义 取决于q的值 ,因此上下文无关testing失败。 到现在为止还挺好。 现在我的问题是:D可以这样说吗? 在D中,哈希表可以通过Value[Key]声明创build,例如 int[string] peoplesAges; // Maps names to ages 静态数组可以用类似的语法来定义: int[3] ages; // Array of 3 elements 和模板可以用来使他们感到困惑: template Test1(T…) { alias int[T[0]] Test; } template Test2(U…) { alias […]

在C ++和D中进行元编程

C ++中的模板机制只是偶然地对模板元编程有用。 另一方面,D的devise是为了方便这个。 显然这更容易理解(或者我听说过)。 我对D没有经验,但是我很好奇,在D中你能做什么,在模板元编程中你不能用C ++呢?

D为什么0.1 + 0.2 == 0.3?

assert(0.1 + 0.2 != 0.3); // shall be true 是我最喜欢的一个语言使用本机浮点运算的检查。 C ++ #include <cstdio> int main() { printf("%d\n", (0.1 + 0.2 != 0.3)); return 0; } 输出: 1 http://ideone.com/ErBMd python print(0.1 + 0.2 != 0.3) 输出: True http://ideone.com/TuKsd 其他例子 Java: http : //ideone.com/EPO6X C#: http : //ideone.com/s14tV D为什么不是这样? 理解D使用本地浮点数。 这是一个错误? 他们是否使用一些具体的数字表示? 别的东西? 很迷惑。 d import […]