我对帖子中的内容感到有些困惑:case-vs-if-else-if-which-is-more-efficient有人多次建议应该使用多态来代替长的case/if-else语句。我正在努力弄清楚这到底意味着什么。你如何替换:caseTASK_A://dothingsfortaskAbreak;caseTASK_B://dothingsfortaskBbreak;::caseTASK_J://dothingsfortaskJbreak;多态性?如果“做......”部分基本上是相同的重复,我可以理解它,但如果部分或所有“案例”之间存在显着差异,那么这是否仍然适用?
在C++17中,ifconstexpr被介绍;然而,似乎没有switchconstexpr(参见here)。这是为什么?也就是说,如果编译器支持ifconstexpr,那么支持switchconstexpr(最坏情况下作为if-then-else-if-etc。链,或多个if带有一些标志来控制fallthrough)? 最佳答案 ifconstexpr最终源自moresaneform的staticifconcept.由于这种推导,标准委员会似乎没有考虑将相同的想法应用于switch。所以这可能是主要原因:没有人将它添加到论文中,因为
我在一次采访中被问到这个问题。我回答说这是一个条件结构,因为它只执行一次,不像循环可以执行多次。没有循环控制机制,只有根据不同情况进行条件切换。那么我的回答是对还是错,还有更好的答案吗?他还问我为什么break;语句适用于switch-case,因为break;只适用于循环。这个问题我没法回答。 最佳答案 在C++中switch是selection-statementn33766.4/1和6.4.2是关于switchselection-statement:...switch(condition)statementbreak是跳转语句
我正在编写剪刀石头布程序,但这次计算机有一半的时间选择石头,三分之一的时间选择剪刀,只有六分之一的时间选择布。我这样做的方法是列举了六个可能的计算机选择值:enumchoicec{rock1,rock2,rock3,scissors1,scissors2,paper};choiceccomputer;但是,在计算机做出选择之后,我必须将这些枚举值转换为石头、布或剪刀。我使用switch-case语句完成了此操作:switch(computer){caserock1||rock2||rock3:c=1;break;casescissors1||scissors2://ERROR!c=3;
我在ClsA中有两个静态成员声明,如下所示:classClsA{public:staticunsignedshortm_var1;staticunsignedshortm_var2;};unsignedshortClsA::m_var1=1001;unsignedshortClsA::m_var2=1002;在ClsB中,我像这样使用来自ClsA的静态成员声明:unsignedshortvar1;//assumevar1isdeclare/usesomewhereinthecode.switch(var1){caseClsA::m_var1://Error:cannotappear
考虑:#includeusingnamespacestd;intmain(){intscore;chargrade;cout>score;if(score>=90)grade='a';if(score>=80)grade='b';if(score>=70)grade='c';if(score>=60)grade='d';elsegrade='f';cout为什么当我输入95时却给出默认的switchcase,而我应该得到case'a'? 最佳答案 您遗漏了一堆else,或者以错误的顺序进行比较。95大于90,但也大于80、70和60
本质上,我有一个Gamma探测器系统,每个探测器被分成4个晶体,在只有2个晶体命中的情况下,我们可以确定该对是垂直还是平行于产生react的平面Gamma射线。在为此编写逻辑的过程中,我写了一个巨大而丑陋的开关语句组合,在每个探测器中检查晶体编号的组合(它们在整个探测器及其晶体阵列中是唯一的)。这是代码,包括有问题的函数。//TheParallelandPerpendiculardesignationsareusedinadditiontotheDouble//designationforthe90degreedetectorsifwegetadiagonalscatterinthos
我正在尝试将其转换为switch语句if(codeSection==281)cout编译器说switch语句多字符常量,并给我一个黄色警告但仍然可以编译。我的问题是这种情况应该只采用char形式吗?像案例'2' 最佳答案 case'281':应该是case281:其余部分也类似,否则编译器“认为”您尝试使用多字符常量,这可能不是您想要的。case不必是char。事实上,它必须是与转换和整数提升后的条件类型相同类型的常量表达式,参见例如http://en.cppreference.com/w/cpp/language/switch.
我正在创建一个SimpleDirect2DApplication.不幸的是它给未处理的异常。发生的函数:voidDemoApp::OnResize(UINTwidth,UINTheight){if(m_pRenderTarget)Resize(D2D1::SizeU(width,height));}}调用OnResize()的代码片段是:DemoApp*pDemoApp=reinterpret_cast(static_cast(::GetWindowLongPtrW(hwnd,GWLP_USERDATA)));boolwasHandled=false;if(pDemoApp){swit
我有一组函数,它们由整数类型Index和类类型T模板化,我按以下方式“部分专门化”://IntegertypeenumIndex{One,Two,Three,Four};//DefaultimplementationtemplatestructFoo{templatestaticvoidbar(constT&x){std::coutstructFoo{templatestaticvoidbar(constT&x){std::cout我使用它在程序运行时使用switch语句选择特定索引(这应该会产生一个高效的查找表)。开关独立于T:templatevoidbarSwitch(intk,c