使用switch语句与使用if30个unsigned枚举的语句的最佳实践是什么,其中大约10个具有预期的操作(目前是相同的操作).需要考虑性能和空间,但并不重要.我已经抽象了代码片段,所以不要因为命名惯例而讨厌我.
switch 声明:
// numError is an error enumeration type, with 0 being the non-error case
// fire_special_event() is a stub method for the shared processing
switch (numError)
{
case ERROR_01 : // intentional fall-through
case ERROR_07 : // intentional fall-through
case ERROR_0A : // intentional fall-through
case ERROR_10 : // intentional fall-through
case ERROR_15 : // intentional fall-through
case ERROR_16 : // intentional fall-through
case ERROR_20 :
{
fire_special_event();
}
break;
default:
{ …Run Code Online (Sandbox Code Playgroud) 在C中有一个switch构造,它使一个人能够根据一个测试整数值执行不同的条件代码分支,例如,
int a;
/* Read the value of "a" from some source, e.g. user input */
switch ( a ) {
case 100:
// Code
break;
case 200:
// Code
break;
default:
// Code
break;
}
Run Code Online (Sandbox Code Playgroud)
如何为字符串值获得相同的行为(即避免所谓的" if- else阶梯"),即char *?
当我发现我只能在C++的switch语句中使用数值时,我认为那里必须有一些更深的区别if-else.
所以我问自己:
switch有所不同if-elseif-elseif?我这里主要谈的是MSVC.c++ if-statement switch-statement visual-c++ visual-c++-2010
我想声明一个"jumplabels"数组.
然后我想跳到这个数组中的"jumplabel".
但我不知道该怎么做.
它应该类似于以下代码:
function()
{
"gotolabel" s[3];
s[0] = s0;
s[1] = s1;
s[2] = s2;
s0:
....
goto s[v];
s1:
....
goto s[v];
s2:
....
goto s[v];
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何执行此操作?
我试图使用boost :: any来封装sqlite返回值.然后我试着写一个循环来打印这些.
我的第一个想法是做一些像:
for(boost::any field: row) {
switch(field.type()) {
case typeid(double):
double value = any_cast<double>(field);
...
break;
case typeid(other type):
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在对于有经验的程序员来说,显然这不起作用,因为typeid返回实例而不是数字id.经过一些研究,我认为我可能会尝试,typeid(...).hash_code()但这不足够constexpr合格(除了哈希冲突的危险).
if ... else ...迷宫更好的方法来处理基于他们的typeid的对象?hash_code不是const_expr?这是单独编译目标文件的结果吗?std::type_index?考虑到它只是提供了一些额外的运营商(<,<=,>,>=),为什么却无法其功能与整合std::type_info?我正在阅读有关C编程的本教程.它说:
switch语句实际上完全不同(来自其他语言),实际上是一个"跳转表".您可以只放置导致整数的表达式,而不是随机布尔表达式,这些整数用于计算从开关顶部到匹配该值的部分的跳转.这里有一些代码我们将分解以理解"跳转表"的概念.
但是,需要比较switch语句的情况,直到找到匹配项(否则返回default).
它与多个if-else语句有什么不同呢?或者,它只是一个语法糖?我错过了一些重要的东西吗?
以下是我需要优化和计划的代码,以便切换到最佳状态.但我可以比较一下.所以我计划将comaparision(len> 3)作为默认情况.
如果我将比较部分(len> 3)作为默认情况并在swith中添加默认值,它会更快吗?
或者我如何将下面的代码作为switch语句?
if ( len > 3 ) {
which will happen more often;
}
else if ( len == 3 ) {
next case which may occur often;
} else if ( len == 2 ) {
the next priority case;
} else {
and this case occurs rarely;
}
Run Code Online (Sandbox Code Playgroud) 我可以在"切换"语句中添加集而不是数字吗?喜欢:
switch(number)
{
case 1<50: //if number is between 1 and 50
{
blah;
break;
}
case 50<100: //if number is between 50 and 100
{
blah;
break;
}
Run Code Online (Sandbox Code Playgroud)
等等.
c++ ×7
c ×4
if-statement ×4
boost ×1
boost-any ×1
goto ×1
java ×1
jump-table ×1
optimization ×1
set ×1
sqlite ×1
visual-c++ ×1