C++ 大型switch语句的实现与效率
我继承了一些代码,这些代码在许多地方都包含消息处理代码,这些代码是这样实现的:C++ 大型switch语句的实现与效率,c++,if-statement,switch-statement,C++,If Statement,Switch Statement,我继承了一些代码,这些代码在许多地方都包含消息处理代码,这些代码是这样实现的: switch(msgType) { case msgType1: //.... switch(msgSubType): { case msgType2: //.... } } 有10种消息类型和100种消息子类型。这段代码经常被执行,我的问题是它的效率。这样的代码有多高效,特别是在大量情况下?sw
switch(msgType)
{
case msgType1:
//....
switch(msgSubType):
{
case msgType2:
//....
}
}
有10种消息类型和100种消息子类型。这段代码经常被执行,我的问题是它的效率。这样的代码有多高效,特别是在大量情况下?switch案例是否像else语句一样实现?某种哈希表或跳转表会更好吗?我愿意牺牲代码的可读性来换取性能,并且对任何答案/建议都感兴趣。我认为这最终会在任何体面的现代编译器下优化为跳转表。我同意@H2CO3-现代编译器应该比您做得更好。只需检查汇编代码或对这里真正发生的事情进行基准测试,以确保。我刚才在MSVC2010上做了一个测试-
开关
是O(1),我。@evgenypanasuk很棒的测试!这再次表明虚拟函数的膨胀是一个被揭穿的神话。无论编译器如何处理这段代码,都应该对其进行重构以提高可读性。每个case
标签后面都应该跟着简单的代码,而不是另一个包含数百个case的开关。将该代码放在它自己的函数中,并根据需要从顶级switch语句调用它。@evgenypanasuk同意,但尽管如此,这个代码示例仍然需要多态性。事实上,它是脆弱的,而且是无法维护的。牺牲这么多的可读性确实需要大量的性能作为理由。