在开关盒内打开其他分支确定
Is opened else branch inside a switch-case ok?
我的代码意外地以以下结构结束。我不确定这是否可以。
switch (msg.type)
{
case Msg::Type::One:
case Msg::Type::Two:
// do nothing
break;
case Msg::Type::Open:
if (msg.isBad())
break;
else // opened else branch is ok here??
// intended fall through
case Msg::Type::Close:
goodMsg.push_back(msg);
doSomethingOther();
blaBla();
break;
}
它可能有效,但如果您打算失败,我会完全删除其他内容,并发表评论说这是故意失败。
我建议不要这样做。 在编码方面,每个人都应该遵循三点重要性层次结构:
- 可读性
- 功能性
- 效率
我认为你在这里试图做的是试图通过减少编写的代码量来使其更具可读性,但问题是它实际上起到了相反的作用。
尝试想出另一种方法来完成您正在尝试完成的任务,这对于完全熟悉您的代码的人来说更容易理解。
一个建议是省略空白的else,只使用if语句。 虽然这可以说仍然不是可读性的最佳选择,但它比 else 语句更好,并且在工作场所实际上是可以容忍的。
让我们标记代码的某些区域:
switch (msg.type) {
case Msg::Type::One:
case Msg::Type::Two:
// (1)
break;
case Msg::Type::Open:
if (msg.isBad()) {
// (2)
break;
} else {
// (3)
// intended fall through
}
case Msg::Type::Close:
// (4)
goodMsg.push_back(msg);
doSomethingOther();
blaBla();
break;
}
下表显示了将运行哪些代码:
(1) (2) (3) (4)
Msg::Type::One ✔︎
Msg::Type::Two ✔︎
Msg::Type::Open && Bad ✔︎
Msg::Type::Open && !Bad ✔︎ ✔︎
Msg::Type::Close ✔︎
话虽如此,此代码的大多数读者都会认为失败条件是一个错误。因此,我强烈建议重构此代码。
if
语句的语法为:
if (expression) statement
或
if (expression) statement else statement
在代码中,与 else
关键字关联的语句是goodMsg.push_back(msg);
的整个(恰好具有与之关联的大小写标签)。switch
语句
我无法从您的问题中判断这是否是您的意图,尽管您的缩进表明您的意思是switch
语句独立于if
/else
。
如果这是您的意图,则else
没有用。您的逻辑将更清楚地表达为:
if (condition) break;
case ...
我的建议:始终对条件语句和循环语句使用大括号。这使您可以避免首先提出这样的问题:
if (condition) {
statement
}
else {
statement
}
if
/else if
/.../else
链是一个特例。从语法上讲,它是一组嵌套的 if
/else
语句,但惯例是将其视为线性链,这样写道:
if (condition) {
statement
}
else if (condition) {
statement
}
else {
statement
}
而不是:
if (condition) {
statement
}
else {
if (condition) {
statement
}
else {
statement
}
}
请注意,我使用的是 K&R 风格的大括号放置,每个{
都在一行的末尾。另一种非常常见的样式将{
和}
单独放在线条上。这两种选择都是有效的(我显然有自己的偏好),只要你保持一致。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 如何删除peer if else分支中的冗长句子
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 结构和双指针隐藏在其他结构中,多层混淆
- C++,许多类派生自一个类,所有派生类都使用从其他东西派生的类,但它们的基使用该分支的基
- FreeSWITCH:有没有办法通过本机API从其他分支获取音频流?
- 在声明虚拟方法的父分支之外的其他父分支中实现虚拟方法
- 在开关盒内打开其他分支确定