C++中能否将switch-case返回值作为if语句的判断条件?
C++ switch语句作为if条件写法合法性解答
结论
你给出的代码形式在所有C++标准中都无法直接编译运行,核心原因是传统C++中switch是语句而非表达式,没有返回值,不能直接作为比较运算符的操作数。
详细说明
- 标准C++11及更早版本没有switch表达式特性,你示例中的写法属于语法错误,编译器会直接报错。
- 你代码中
switch内部的return语句会直接退出当前所在函数,根本不会将值返回给外层if的条件判断逻辑,就算语法能通过,运行逻辑也不符合你的预期。
兼容的替代实现方案
方案1:全版本兼容写法(推荐)
先将switch的计算结果存入临时变量,再放到if条件中判断:
int switchRet = -1; switch(secValue) { case First: switchRet = 1; break; case Second: switchRet = 2; break; default: switchRet = -1; } if(value <= switchRet) { // 执行对应逻辑 }
方案2:C++11及以上可用的立即调用lambda写法
如果不想额外声明单独的临时变量,可以用匿名lambda立刻执行包裹switch逻辑:
if(value <= [&](){ switch(secValue) { case First: return 1; case Second: return 2; default: return -1; } }()) { // 执行对应逻辑 }
内容的提问来源于stack exchange,提问作者Niles。
相关产品推荐
相关产品推荐

