Tag: 范围检查

执行范围检查通过投射到uint而不是检查负值是否更有效?

我偶然发现了.NET的List源代码中的这段代码 : // Following trick can reduce the range check by one if ((uint) index >= (uint)_size) { ThrowHelper.ThrowArgumentOutOfRangeException(); } 显然这比if (index < 0 || index >= _size)更有效率(? if (index < 0 || index >= _size) 我很好奇背后的理由。 单个分支指令是否比两个转换为uint更昂贵? 还是有一些其他的优化,会使这个代码比另一个数字比较更快? 为了解决房间里的大象:是的,这是微型优化,不,我不打算在我的代码中到处使用它 – 我只是好奇;)