C++切换表性能

asa*_*sap 4 c++ performance

switch语句(或编译形式的跳转表)花费的时间来"决定"跳转的位置case是否包含它的数量?

Jer*_*fin 8

它取决于编译器和(通常)你提供的值 - 如果值是"密集的"(即,一个范围内的所有或几乎所有值都有switch语句中的情况),你通常会得到一个跳转表,对所有值(在该范围内)花费相同的时间.如果你有相对稀疏的值,它可能编译成大致相当于if/then/else梯形的代码,在这种情况下,添加更多(稀疏)的case值会增加执行时间.


L̲̳*_*̲̳̳ 5

实际上,编译代码中通常有哈希表或其他O(1)查找数据结构(除非你只有少量的开关,否则编译器可能会决定使用跳转).一般来说,大量的开关应该胜过大量的i​​f语句,尽管通常你没有足够的情况让它变得明显.