http://dlang.org/expression.html#AssertExpression
关于assert(0)
:“编译的优化和代码生成阶段可能会认为它是不可访问的代码。”
相同的文档声称assert(0)
是“特殊情况”,但是有以下几个原因。
D编译器可以基于合同和其他地方中的一般assert
离子进行优化吗?
(好像我需要另一个理由来享受in{}
和out{}
构造,但这肯定会让我感到有点头晕,因为知道编写它们可以使事情变得更加混乱)
最佳答案
从理论上讲,是的,在实践中,我认为它不会这样做,尤其是因为断言甚至在到达dmd -release上的优化程序之前就被杀死了。我不确定gdc和ldc,但我认为它们共享这部分代码。
规范的特殊情况引用btw是assert(0)仍然以-release compile标志的形式存在。它在那里被翻译成非法指令(asm {hlt;}-x86上的非内核程序不允许使用该指令,因此一旦被击中,它就会出现段错误),而所有其他断言都完全不在代码中-释放模式。
关于compiler-optimization - 编译器可以基于assert(…)表达式/契约(Contract)进行优化吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18195556/