7
通过强制转换为uint而不是检查负值来执行范围检查是否更有效?
我在.NET的List源代码中偶然发现了这段代码: // Following trick can reduce the range check by one if ((uint) index >= (uint)_size) { ThrowHelper.ThrowArgumentOutOfRangeException(); } 显然,这比(?)更有效 if (index < 0 || index >= _size) 我对这招背后的理由感到好奇。一条分支指令真的比两次转换贵uint吗?还是正在进行其他优化,以使此代码比其他数字比较快? 为了解决房间里的大象问题:是的,这是微优化,不,我不打算在代码中到处使用它–我只是很好奇;)