c# – 而不是错误,为什么编译器不会将两个文字提升为long类型?
以下两个语句将导致编译器溢出错误(原因是默认情况下检查常量表达式是否溢出):
int i=(int)(int.MaxValue+100); // error long l=(long)(int.MaxValue+100); // error 但是,如果编译器能够确定添加这两个值会导致溢出,那么为什么它不会将int.MaxValue和100都提升为long而只是尝试将它们一起添加?据我所知,这应该不是问题,因为根据以下引用,整数文字也可以是long类型:
感谢名单 解决方法
我想,简短的回答是因为它没有被设计成.每当MS向C#编译器添加功能时(或者当任何人向任何东西添加功能时),都必须进行成本效益分析.人们不得不想要这个功能,实现该功能的成本(在时间编码和测试方面以及可以实现的其他一些功能的机会成本)必须超过该功能为开发人员提供的潜在好处.
在您的情况下,让编译器执行您想要的操作的方法是简单,明显和清晰.如果他们补充:
这意味着他们现在有更多的代码路径来检查和更多的单元测试.改变预期的行为也意味着可能有人依赖于这个记录的事实,其代码现在将无效,因为推论可能不同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |