Sur*_*esh 3 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");
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
1:有多个return语句会导致编译器生成额外的代码吗?
unw*_*ind 29
这是一个过早优化的担忧.
前一种形式更清晰,源线更少,这是选择它的一个令人信服的理由(在我看来),当然.
您应该(像往常一样)对程序进行概要分析,以确定此功能是否在"热门列表"中进行优化.这将告诉您使用时是否存在性能损失break.
正如评论中指出的那样,这个代码的主要性能罪魁祸首很可能是动态分配的字符串.通常,在实现这种"整数到字符串"映射函数时,应该返回字符串常量.
编译代码应该没有区别.然而:
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |