在下面两个版本的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/