相关疑难解决方法(0)

切换if-else语句的优点

使用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++ optimization if-statement switch-statement

162
推荐指数
9
解决办法
10万
查看次数

在C中打开字符串的最佳方法

在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-statement

74
推荐指数
8
解决办法
19万
查看次数

如何在Visual C++中编译切换以及如何优化和快速?

当我发现我只能在C++的switch语句中使用数值时,我认为那里必须有一些更深的区别if-else.

所以我问自己:

  • (如何)在运行时速度,编译时优化和常规编译方面switch有所不同if-elseif-elseif?我这里主要谈的是MSVC.

c++ if-statement switch-statement visual-c++ visual-c++-2010

29
推荐指数
2
解决办法
9782
查看次数

如何将goto标签存储在数组中然后跳转到它们?

我想声明一个"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)

有谁知道如何执行此操作?

c c++ goto jump-table

18
推荐指数
6
解决办法
9799
查看次数

使用typeid处理不同类型

我试图使用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合格(除了哈希冲突的危险).

问题

  1. 有没有比建立一个过度的if ... else ...迷宫更好的方法来处理基于他们的typeid的对象?
  2. 有没有理由hash_code不是const_expr?这是单独编译目标文件的结果吗?
  3. 有什么用std::type_index?考虑到它只是提供了一些额外的运营商(<,<=,>,>=),为什么却无法其功能与整合std::type_info

c++ sqlite boost boost-any

9
推荐指数
2
解决办法
2002
查看次数

Switch语句:C v/s中的逻辑是否不同.其他语言如Java?

我正在阅读有关C编程的教程.它说:

switch语句实际上完全不同(来自其他语言),实际上是一个"跳转表".您可以只放置导致整数的表达式,而不是随机布尔表达式,这些整数用于计算从开关顶部到匹配该值的部分的跳转.这里有一些代码我们将分解以理解"跳转表"的概念.

但是,需要比较switch语句的情况,直到找到匹配项(否则返回default).

它与多个if-else语句有什么不同呢?或者,它只是一个语法糖?我错过了一些重要的东西吗?

c c++ java if-statement switch-statement

5
推荐指数
1
解决办法
1127
查看次数

在Switch case中默认

以下是我需要优化和计划的代码,以便切换到最佳状态.但我可以比较一下.所以我计划将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)

c c++ if-statement switch-statement

4
推荐指数
1
解决办法
3962
查看次数

在"switch"语句中使用sets

我可以在"切换"语句中添加集而不是数字吗?喜欢:

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++ set switch-statement

1
推荐指数
1
解决办法
299
查看次数