我在另一个人的代码中看到了第二个,我想这种长度比较是为了提高代码效率。它用于具有特定字典的脚本语言的解析器:单词长度为 4 到 24 个字母,平均为 7-8 个小写字母,字母表包括 26 个拉丁字母加上“@”、“$”和“_”。
长度比较用于转义 == 运算符处理 STL 字符串,这显然比简单的整数比较需要更多时间。但同时给定字典中的首字母分布比单词大小的分布更宽,因此比较字符串的两个首字母通常比字符串的大小更经常不同。这使得长度比较变得不必要。
我已经进行了一些测试,这就是我发现的:在测试两个随机字符串比较数百万次时,第二种方法要快得多,所以长度比较似乎很有帮助。但是在一个工作项目中,它在调试模式下运行得更慢,而在发布模式下运行速度不够快。
所以,我的问题是:为什么长度比较可以加快比较速度,为什么可以减慢速度?
UPD:我也不喜欢第二种方式,但我想这样做是有原因的,我想知道这是什么原因。
UPD2:说真的,问题不在于如何做到最好。在这种情况下,我什至不再使用 STL 字符串。难怪长度比较是不必要的和错误的等等。奇怪的是 - 它确实倾向于在某个测试中稍微好一点。这怎么可能?