C++
switch 在特定情况下效率远低于 if switch (*it) {
case '\\': /* 处理转义 */ break;
case '\b': case '\r': case '\n': case '\f': /* 报错 */ break;
default: /* 正常添加一个字符 */ break;
}
此时只有 5 个case 和一个 default ,测试数据解析的耗时约 70ms 。如果减去一个 case '\f' 可以降到 64ms,只保留 case '\\` 和 default 则是 60ms 。
但是,一旦你再加上一个判断,像下面这样:
switch (*it) {
case '\\': /* 处理转义 */ break;
case '\b': case '\r': case '\n': case '\f': case '\t' /* 报错 */ break;
default: /* 正常添加一个字符 */ break;
}
这就导致耗时直接增加到 120ms !!!! 这可能是因为分支数量较低时判断方式类似 if/else ,但是增加到一定量后内部实现变为查表甚至二分,而变化交界处的性能存在严重问题。
- MSVC , C++23 , Release 模型,多次测试