首页 > 解决方案 > 没有 case: 或 default: 标签的 switch 语句

问题描述

cppreference.com统计switch 语句的形式是:
attr switch ( condition ) statement
并且statement任何语句。

那么,如果我没有在 中添加任何case:default:标签会发生什么statement,如:
switch (1) {std::cout << 'x';}

如果我用额外的大括号将一个不出现在任何case:default:标签之后的语句包装为:
switch (1) {{std::cout << 'x';}}
因为用额外的大括号包装变量的声明将使该声明合法,即使它在每个case:default:标签之前也是如此。

标签: c++switch-statementcontrol-flow

解决方案


是的,语法允许语句中的任何switch语句。所以下面的片段:

switch( /* condition */ ) 
{
  std::cout << "hello";
}

是完全有效的,尽管没用,因为 a 中switch不带caseordefault标签的语句将永远不会被执行。


如问题中所述,如果要声明变量,switch需要在语句中添加范围。但是,这并不影响上述观点。以下片段:

switch( /* condition */ ) 
{
  {
    std::cout << "hello";
  }
}

也不执行cout语句。


推荐阅读