c++ - 没有 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:
标签之前也是如此。
解决方案
是的,语法允许语句中的任何switch
语句。所以下面的片段:
switch( /* condition */ )
{
std::cout << "hello";
}
是完全有效的,尽管没用,因为 a 中switch
不带case
ordefault
标签的语句将永远不会被执行。
如问题中所述,如果要声明变量,则switch
需要在语句中添加范围。但是,这并不影响上述观点。以下片段:
switch( /* condition */ )
{
{
std::cout << "hello";
}
}
也不执行cout
语句。
推荐阅读
- python - wrap_text 与 openpyxl。如何使用文档来解决弃用警告?
- c - 从 GPIO 输入驱动程序公开 /dev/uio* 文件
- c# - 无法导航到插入符号下的符号 - Visual Studio 2015、2017 和 2019
- sql - 如何搜索数据以查找没有特定值的记录?
- php - 我正面临这个错误“致命错误:未捕获的错误:找不到类'Zend\Uri\Uri'”
- spring-boot - 是否可以在springboot中从命令行设置参数spring.servlet.multipart.max-file-size?
- python - 如何在python中返回一个json块
- python-3.x - 为什么这些 LSTM 参数计数不同?
- r - 我将如何反转 R 中矩阵的二进制数字(0 和 1)?
- c++ - boost odeint 中的受控错误步进器是否支持复杂的数据类型?