当我发现我只能在C++的switch语句中使用数值时,我认为它与一堆if-else的。因此我问自己:(如何)switch与if-elseif-elseif在运行速度、编译时优化和一般编译方面有何不同?我这里主要说的是MSVC。 最佳答案 一个开关通常被编译成一个跳转表(一个比较来找出要运行的代码),或者如果这不可能,编译器仍然可以重新排序比较,以便在值之间执行二进制搜索(日志N比较)。if-else链是线性搜索(尽管我想,如果所有相关值都是编译时整数常量,编译器原则上可以执行类似的优化)。
当我发现我只能在C++的switch语句中使用数值时,我认为它与一堆if-else的。因此我问自己:(如何)switch与if-elseif-elseif在运行速度、编译时优化和一般编译方面有何不同?我这里主要说的是MSVC。 最佳答案 一个开关通常被编译成一个跳转表(一个比较来找出要运行的代码),或者如果这不可能,编译器仍然可以重新排序比较,以便在值之间执行二进制搜索(日志N比较)。if-else链是线性搜索(尽管我想,如果所有相关值都是编译时整数常量,编译器原则上可以执行类似的优化)。
我可能看多了一些东西,但是在C++中有没有一种简单的方法可以将案例组合在一起而不是单独写出来?我记得基本上我可以做到:SELECTCASEAnswerCASE1,2,3,4C++中的示例(适合需要的人):#include#includeintmain(){intAnswer;cout>Answer;switch(Answer){case1:case2:case3:case4:cout 最佳答案 AFAIK你所能做的就是省略返回以使C++中的东西更紧凑:switch(Answer){case1:case2:case3:case4:co
我可能看多了一些东西,但是在C++中有没有一种简单的方法可以将案例组合在一起而不是单独写出来?我记得基本上我可以做到:SELECTCASEAnswerCASE1,2,3,4C++中的示例(适合需要的人):#include#includeintmain(){intAnswer;cout>Answer;switch(Answer){case1:case2:case3:case4:cout 最佳答案 AFAIK你所能做的就是省略返回以使C++中的东西更紧凑:switch(Answer){case1:case2:case3:case4:co
在切换每个枚举都被一个案例覆盖的枚举时,您的程序是什么?理想情况下,您希望代码能够面向future,您如何做到这一点?另外,如果某些白痴将任意int强制转换为枚举类型怎么办?是否应该考虑这种可能性?或者我们应该假设这样一个严重的错误会在代码审查中被发现?enumEnum{Enum_One,Enum_Two};Specialmake_special(Enume){switch(e){caseEnum_One:returnSpecial(/*stuffone*/);caseEnum_Two:returnSpecial(/*stufftwo*/);}}voiddo_enum(Enume){s
在切换每个枚举都被一个案例覆盖的枚举时,您的程序是什么?理想情况下,您希望代码能够面向future,您如何做到这一点?另外,如果某些白痴将任意int强制转换为枚举类型怎么办?是否应该考虑这种可能性?或者我们应该假设这样一个严重的错误会在代码审查中被发现?enumEnum{Enum_One,Enum_Two};Specialmake_special(Enume){switch(e){caseEnum_One:returnSpecial(/*stuffone*/);caseEnum_Two:returnSpecial(/*stufftwo*/);}}voiddo_enum(Enume){s
这个问题在这里已经有了答案:Defaultcaseinaswitchcondition(3个回答)关闭8年前。我在其他网站上提出了这个程序并想尝试一下,程序如下:#includeintmain(){inta=10;switch(a){case'1':printf("one");break;case'2':printf("two");break;defau4t:printf("none");}return0;}令人惊讶的是,它编译时没有错误或警告。这怎么可能?关键字“default”没有错误吗?谁能解释这种行为? 最佳答案 token
这个问题在这里已经有了答案:Defaultcaseinaswitchcondition(3个回答)关闭8年前。我在其他网站上提出了这个程序并想尝试一下,程序如下:#includeintmain(){inta=10;switch(a){case'1':printf("one");break;case'2':printf("two");break;defau4t:printf("none");}return0;}令人惊讶的是,它编译时没有错误或警告。这怎么可能?关键字“default”没有错误吗?谁能解释这种行为? 最佳答案 token
我的老师指定了一个程序来同时使用if-else语句和switch语句,因此我们了解如何实现这两种语句。该程序要求我们提示用户分别以磅和米为单位输入他们的体重和高度。这是我的尝试:没有开关#include"stdafx.h"#includeusingnamespacestd;intmain(){doubleheight,weight,BMI,heightMeters,weightKilo;constdoubleKILOGRAMS_PER_POUND=0.45359237;constdoubleMETERS_PER_INCH=0.0245;cout>height>>weight;weigh
我的老师指定了一个程序来同时使用if-else语句和switch语句,因此我们了解如何实现这两种语句。该程序要求我们提示用户分别以磅和米为单位输入他们的体重和高度。这是我的尝试:没有开关#include"stdafx.h"#includeusingnamespacestd;intmain(){doubleheight,weight,BMI,heightMeters,weightKilo;constdoubleKILOGRAMS_PER_POUND=0.45359237;constdoubleMETERS_PER_INCH=0.0245;cout>height>>weight;weigh