`
oldrev
  • 浏览: 230190 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

D新闻组里的天才代码

PHP 
阅读更多
超猛的代码,刚才逛新闻组刚看到的,随便记录一下。


出自:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=68681


import std.stdio;
import std.traits;

//检测整数操作溢出,不过对性能的影响比较大,lazy 关键字的标准运用。
Integral checked(Integral)(lazy Integral dg)
{
     static assert(isIntegral!(Integral));

     Integral result = dg(); //这里才对委托 dg 里的表达式求值
     asm {
         jo overflow;
     }
     return result;

     overflow:
     throw new Exception("Integer overflow occured");
}

int main()
{
     int t = int.max;
     try
     {
         int s = checked(t + 1);
         writefln("Result is %d", s);
     }
     catch(Exception e)
     {
         writefln("Whoops! %s", e.toString());
     }
     return 0;
}


连 WB 都服了。
分享到:
评论
2 楼 oldrev 2008-03-31  
没看过产生的汇编代码,测试了是可行的。如果用宏来实现就完美了
1 楼 DavidL 2008-03-31  
这里的lazy根本没推后evaluate吧?
这个的优化我看在于用了一条指令来决定是否越界,但是要求编译器对这里的delegate要inline

相关推荐

Global site tag (gtag.js) - Google Analytics