3

一些著名的代码风格书籍建议尽可能将变量声明为本地( https://stackoverflow.com/a/10205934/700825
我的问题是:switch 语句是否不受此规则的约束?例如,如果所有(或大多数)案例具有相似的结构并且它们都使用字符串来完成类似的事情,那么应该在每种情况下还是在切换之前声明该字符串?

4

5 回答 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;
             }
}

参考:http ://en.cppreference.com/w/cpp/language/switch

于 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 回答