Tom*_*mas 12 c++ standards switch-statement
这是出于好奇.单个交换机中可以拥有的最大交换机数量是多少,包括默认值:case.我的意思是这样的:
switch(ch)
{
case 1:
//some statement
break;
case 2:
//some statement
break;
.
.
.
.
case n:
//some statement
break;
default:
//default statement
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我们可以在这里获得的最大价值是多少?虽然这不是编程上重要的,但我发现这是一个相当有趣的想法.我搜索了一些博客并在此发现了一个声明.
从我的文件,据说:
标准C指定交换机可以包含至少257个case语句.标准C++建议至少支持16,384个案例语句!真正的价值必须取决于实施.
但我不知道这些信息有多准确,有人可以给我一个想法吗?此外,依赖于实现意味着什么?假设存在这样的限制,我可以以某种方式将其更改为更高或更低的值吗?
Sha*_*our 18
该草案C++标准 Annex B (informative) Implementation quantities说(重点煤矿):
由于计算机是有限的,因此C++实现不可避免地受限于它们可以成功处理的程序的大小.每个实施都应记录已知的限制.[...]
限制可能会限制包括下面描述的数量或其他数量的数量.建议将每个数量后面的括号内的数字作为该数量的最小值.但是,这些数量仅是指导原则,不能确定合规性.
并包括以下项目:
- switch语句的case标签(不包括任何嵌套switch语句的标签)[16384].
但这些并不是硬限制,只是对最小值的建议.
实现是编译器,标准库和支持工具,因此实现依赖基本上意味着在这种情况下编译器将决定限制是什么,但它应该记录此限制.该标准草案定义了实现定义的行为在部分1.3.10如下:
行为,对于格式良好的程序构造和正确的数据,这取决于实现和每个实现文档
我们可以看到,gcc 不加以限制的Ç:
GCC仅受可用内存的限制.
在这种情况下,它也应该涵盖C++,看起来Visual Studio也没有限制:
Microsoft C不限制switch语句中的case值的数量.该数量仅受可用内存的限制.ANSI C要求在switch语句中允许至少257个case标签.
我找不到类似的文档clang.
您的问题被标记为 C++,因此根据 C++98 附录 B/1:
由于计算机是有限的,C++ 实现不可避免地会受到它们能够成功处理的程序大小的限制。每个实施都应记录已知的这些限制。本文档可能会引用存在的固定限制,说明如何根据可用资源计算可变限制,或者说明固定限制不存在或未知。
然后是附件 B/2:
这些限制可能会限制包括以下描述的数量或其他数量。建议每个数量后面的括号内的数字作为该数量的最小值。然而,这些数量只是指导方针,并不能确定合规性。
因此,只要实现记录了它正在做什么,就允许任何最大数量的 case 语句。然而,该标准在下面的列表中推荐了 16384。