default写在case之前会不会有潜在的问题?

问题描述 投票:0回答:1

我看到了一个奇怪的代码片段(见下文)。 ): 使用 C++11 及更高版本的 C++11 时,此代码片段是否存在任何潜在问题?上述代码片段确实可以通过 gcc 编译并运行良好。

#include <iostream>
#include <array>
#include <algorithm>

int main() {

    switch (1) {
        default:
            std::cout << "in default" << std::endl;
            break;
        case (1):
            std::cout << "in case 1" << std::endl;
            break;
    }

    return 0;
}

c++
1个回答
0
投票

案例标签可以按任何顺序出现。选择一个使您的代码最容易理解的顺序。如果您的

default
案例是致命错误(例如,因为您想在运行时捕获丢失的案例),那么将其放在顶部以声明开关“意图详尽”也可能会很好。

switch
的语义是您跳转到相关案例,因此您可以使用它来做任何您喜欢的事情。如果您在每个案例结束时
break
,则案例顺序并不重要,但如果您允许流入下一个案例,那么顺序当然很重要。尽管有时它可能会有所帮助(并且可以使用
[[fallthrough]]
属性在代码中清楚地表明其意图),但通常认为失败是微妙且意外的。

© www.soinside.com 2019 - 2024. All rights reserved.