c++ - 在案例中更改开关变量

标签 c++ switch-statement

在下面的代码中:

int i = 0;

switch(i)
{
    case 0:
        cout << "In 0" << endl;
        i = 1;
        break;
    case 1:
        cout << "In 1" << endl;
        break;
}

会发生什么?它会调用未定义的行为吗?

最佳答案

没有未定义的行为。但是i的值只有在代码到达switch(i)时才会被测试。所以 case 1: 将被跳过(通过 break; 语句)。

switch 关键字并不意味着“只要 i 的值为 0/1 就运行代码”。这意味着,立即检查 i 是什么,并基于此运行代码。它不关心 i 将来会发生什么。

事实上,有时这样做很有用:

for( step = 0; !cancelled; ++step ) {
    switch (step)
    {
        case 0:
            //start processing;
            break;

        case 1:
            // more processing;
            break;

        case 19:
            // all done
            return;
    }
}

在构建有限状态机时,更改 case block 中的控制变量非常常见(尽管不是必需的,因为您可以在 中设置 next_state case,然后做赋值state = next_state)。

关于c++ - 在案例中更改开关变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333701/

相关文章:

c# - 字符串文字和字 rune 字可以连接吗?

c++ - Visual C++ 2008 中的函数 try block

javascript - es6 中 case 后的 switch 语句中的大括号有什么作用?

c++ - 未到达的案例会影响切换案例的性能

php - PHP 中的 SWITCH 语句问题

c++ - 运算符重载和堆与堆栈的混淆

c++ - 通过 UDP 将信息哈希发送到 Bittorrent Tracker

c++ - std::shared_timed_mutex 上的共享锁可以升级为独占锁吗?

java - String 是关于 switch 的数字类型并且总是编译为 lookupswitch 吗?

actionscript-3 - 从 Switch Case 返回值时出错?