C++中的Switch/Case语句

13

关于下面的C++代码中的switch/case语句: "Case 1" 明显是假的,但它为什么进入 do-while 循环呢?

#include <iostream>

using namespace std;

int main() {

    int test = 4;

    switch(test) {
        case 1: do {
            case 2: test++;
            case 3: test++;
            case 4: cout << "How did I get inside the do-while loop?" << endl; break;
            case 5: test++;
        } while(test > 0);
        cout << test << endl;
    }
}

我在你的例子中没有看到case 7 - R Samuel Klatchko
轻微的打字错误,我将7改为1。 - user320723
4个回答

18

2
聪明...?我认为这更取决于具体情况。如果它影响了代码的可读性,我不会使用它。你能给我一个更具体的应用例子吗? - Phong
1
@Phong:邪恶的事物仍然可以很聪明。 - Greg Hewgill
2
+1:了解“达夫设备”。-0.1因使用“聪明”的词汇而扣分;-) - johnsyweb
1
这段代码在那场辩论中形成了某种争论,但我不确定它是支持还是反对。- 达夫。这一直是我最喜欢的引言之一。 - Dennis Zickefoose
对于那些不认为这是聪明的人,请注意这是一种优化技术,不应该在一般情况下使用,而只有在性能至关重要时才使用。它允许手动执行紧密循环的部分展开,而不管迭代次数如何。 - David Rodríguez - dribeas
显示剩余2条评论

0

我没有测试过,但通常只要你没有实现“break”语句,就应该进入do/while循环...


0

Switch 语句并不会评估/理解源代码,它只是一个命令,直接跳转到源代码标签 case 4


0
你进入do-while循环的原因是:
Switch语句从第一个标签开始处理。如果它没有遇到break语句,它将继续按顺序执行每个标签,直到遇到一个break语句(在这种情况下退出),或者已经执行了所有标签中的所有代码,然后退出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接