相关疑难解决方法(0)

'switch'比'if'快吗?

是一种switch说法实际上比更快的if声明?

我使用/Ox标志在Visual Studio 2010的x64 C++编译器上运行下面的代码:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define MAX_COUNT (1 << 29)
size_t counter = 0;

size_t testSwitch()
{
    clock_t start = clock();
    size_t i;
    for (i = 0; i < MAX_COUNT; i++)
    {
        switch (counter % 4 + 1)
        {
            case 1: counter += 4; break;
            case 2: counter += 3; break;
            case 3: counter += 2; break;
            case 4: counter += 1; break;
        }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c performance assembly switch-statement jump-table

232
推荐指数
7
解决办法
5万
查看次数

switch()语句用法

我对R中的switch语句有点困惑.只需在googling函数中我得到一个例子,如下所示:

switch的一个常见用途是根据函数的一个参数的字符值进行分支.

 > centre <- function(x, type) {
 + switch(type,
 +        mean = mean(x),
 +        median = median(x),
 +        trimmed = mean(x, trim = .1))
 + }
 > x <- rcauchy(10)
 > centre(x, "mean")
 [1] 0.8760325
 > centre(x, "median")
 [1] 0.5360891
 > centre(x, "trimmed")
 [1] 0.6086504
Run Code Online (Sandbox Code Playgroud)

然而,这似乎只是if为每个指定了一堆语句type

这就是全部switch()吗?有人可以给我更多的例子和更好的应用吗?

r switch-statement

104
推荐指数
1
解决办法
15万
查看次数

何时使用if-else if-else over switch语句,反之亦然

为什么要switch在一系列if语句中使用块?

switch 语句似乎做同样的事情,但需要更长的时间来输入.

switch-statement

81
推荐指数
3
解决办法
9万
查看次数

为什么switch语句而不是if-else?

我一直想知道这件事已经有一段时间了.我到目前为止还不是一个核心程序员,主要是小型Python脚本,我写了几个分子动力学模拟.对于真正的问题:switch语句有什么意义?你为什么不能只使用if-else语句

感谢您的回答,如果之前有人询问过,请指向我的链接.

编辑

S.Lott指出,这可能是问题If/Else vs. Switch的重复.如果你想关闭然后这样做.我将把它留待进一步讨论.

language-agnostic if-statement switch-statement

60
推荐指数
5
解决办法
8万
查看次数

JVM的LookupSwitch和TableSwitch之间的区别?

我在Java字节码中理解LookUpSwitch和TableSwitch有些困难.

如果我理解得很好,LookUpSwitch和TableSwitch都对应于switchJava源代码的声明?为什么一个JAVA语句生成2个不同的字节码?

每个Jasmin文档:

java bytecode jasmin

59
推荐指数
3
解决办法
1万
查看次数

紧凑的方式来写if(..)语句有很多相等

有没有更好的方法来编写这样的代码:

if (var == "first case" or var == "second case" or var == "third case" or ...)
Run Code Online (Sandbox Code Playgroud)

在Python中我可以写:

if var in ("first case", "second case", "third case", ...)
Run Code Online (Sandbox Code Playgroud)

这也让我有机会轻松通过好的选项列表:

good_values = "first case", "second case", "third case"
if var in good_values
Run Code Online (Sandbox Code Playgroud)

这只是一个例子:类型var可能与字符串不同,但我只对alternative(or)比较(==)感兴趣.var可以是非const,而选项列表在编译时是已知的.

专享奖金:

  • 懒惰的 or
  • 编译时循环展开
  • 容易扩展到其他运营商 ==

c++ if-statement

55
推荐指数
6
解决办法
4356
查看次数

"rep ret"是什么意思?

我在Visual Studio 2008上测试了一些代码并注意到了security_cookie.我能理解它的重点,但我不明白这条指令的目的是什么.

    rep ret /* REP to avoid AMD branch prediction penalty */
Run Code Online (Sandbox Code Playgroud)

当然我可以理解评论:)但是这个前缀exaclty在上下文中做了ret什么,如果ecx是!= 0 会发生什么?显然,ecx当我调试它时,忽略循环计数,这是预期的.

我发现这里的代码在这里(由编译器注入安全性):

void __declspec(naked) __fastcall __security_check_cookie(UINT_PTR cookie)
{
    /* x86 version written in asm to preserve all regs */
    __asm {
        cmp ecx, __security_cookie
        jne failure
        rep ret /* REP to avoid AMD branch prediction penalty */
failure:
        jmp __report_gsfailure
    }
}
Run Code Online (Sandbox Code Playgroud)

x86 assembly

42
推荐指数
3
解决办法
3万
查看次数

switch语句中的case的顺序是否会影响性能?

我有一个switch案例程序:

升序订单开关案例:

int main()
{
        int a, sc = 1;
        switch (sc)
        {
                case 1:
                        a = 1;
                        break;
                case 2:
                        a = 2;
                        break;
        }
}
Run Code Online (Sandbox Code Playgroud)

汇编代码:

main:
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], 1
        mov     eax, DWORD PTR [rbp-4]
        cmp     eax, 1
        je      .L3
        cmp     eax, 2
        je      .L4
        jmp     .L2
.L3:
        mov     DWORD PTR [rbp-8], 1
        jmp     .L2
.L4:
        mov     DWORD PTR [rbp-8], 2
        nop
.L2:
        mov     eax, 0
        pop     rbp
        ret …
Run Code Online (Sandbox Code Playgroud)

c performance gcc switch-statement

31
推荐指数
5
解决办法
6911
查看次数

27
推荐指数
3
解决办法
9万
查看次数

Switch case语句如何实现或在内部工作?

我在某处读到该switch语句使用"二进制搜索"或一些排序技术来精确选择正确的情况,与else-if梯形图相比,这增加了它的性能.

如果我们按顺序给出案例,那么交换机的工作速度会更快吗?是这样吗?你能在这个问题上添加宝贵的建议吗?

我们在这里讨论了相同的问题并计划发布作为一个问题.

c c++ gcc if-statement switch-statement

23
推荐指数
2
解决办法
1万
查看次数