一些著名的代码风格书籍建议尽可能将变量声明为本地(
https://stackoverflow.com/a/10205934/700825)
我的问题是:switch 语句是否不受此规则的约束?例如,如果所有(或大多数)案例具有相似的结构并且它们都使用字符串来完成类似的事情,那么应该在每种情况下还是在切换之前声明该字符串?
问问题
359 次
5 回答
2
去做就对了?
switch(cond)
{
case 1:
{
// An inner scope...
int x;
}
break;
}
于 2013-05-23T11:03:57.657 回答
2
我建议您尽可能将它们保留在本地
注意:
switch(1) {
case 1: int x = 0; // initialization
std::cout << x << '\n';
break;
default: // compilation error: jump to default: would enter the scope of 'x'
// without initializing it
std::cout << "default\n";
break;
}
请记住保护每个案例块:
switch(1) {
case 1: { int x = 0;
std::cout << x << '\n';
break;
} // scope of 'x' ends here
default: {
std::cout << "default\n"; // no error
break;
}
}
于 2013-05-23T11:04:07.713 回答
2
检查是否可以在函数中封装您打算在 case-break 块中使用的代码。我建议只在案例语句中调用函数/方法,但不要有大的代码块。
另一种可能性是在 switch-break 中使用 {}。例如:
case 1:
{
int i=0;
}
break;
应该管用。
于 2013-05-23T11:05:16.653 回答
0
它在性能方面没有显着差异。事实上,在 case 中声明变量可能比提前声明要好一些。在可读性方面,最好形成变量的自然组,即在每个案例中声明变量。
于 2013-05-23T10:59:08.403 回答
0
规则规定declare vars as local as possible
。
首先请记住,这只是一个非常好的建议,而不是实际规则。
但除此之外,如果所有案例都具有相似的结构,并且您决定在案例之前声明一个变量,那么在这种情况下它仍然尽可能局部。
于 2013-05-23T11:01:02.057 回答