c++ - 高效的switch语句

标签 c++ performance switch-statement

在下面两个版本的switch case中,我想知道哪个版本是高效的。

1:

string* convertToString(int i)
{
    switch(i)
    {
    case 1:
        return new string("one");
    case 2:
        return new string("two");
    case 3:
        return new string("three");
        .
        .
    default:
        return new string("error");
    }
}

2:

string* convertToString(int i)
{
    string *intAsString;
    switch(i)
    {
    case 1:
        intAsString = new string("one");
        break;
    case 2:
        intAsString = new string("two");
        break;
    case 3:
        intAsString = new string("three");
        break;
        .
        .
    default:
        intAsString = new string("error");
        break;
    }
return intAsString;
}

1:有多个return语句会不会导致编译器产生额外的代码?

最佳答案

这是过早的优化担忧。

前一种形式更清晰,源代码行更少,这当然是选择它的一个令人信服的理由(在我看来)。

您应该(像往常一样)分析您的程序,以确定该函数是否在优化的“热门列表”上。这将告诉您使用 break 是否会降低性能。

正如评论中所指出的,这段代码的主要性能罪魁祸首很可能是动态分配的字符串。一般来说,在实现这种“整数到字符串”的映射函数时,应该返回字符串常量。

关于c++ - 高效的switch语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847196/

相关文章:

linux-kernel - 这个内核函数可以更具可读性吗? (学术研究需要的想法!)

PHP 开关,为什么这不起作用?

c++ - 最大subarray_problem理解

c++ - 等价于 C++ 中的 NSMutableArray?

SQL Server 数据优化顾问错误

C# Winform 网格在 Windows 7 上呈现缓慢

python-3.x - 带掩码的 numpy 数组的邻居和

c++ - 关于将 const 引用绑定(bind)到临时对象的子对象

c++ - 为什么要从 C++ 中删除 overload 关键字?

javascript - 通过 styles.xml 设置 android switch 样式