尽可能在本地声明变量和switch语句

时间:2013-05-23 10:57:23

标签: c++ c switch-statement

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

5 个答案:

答案 0 :(得分:2)

做到这一点?

switch(cond)
{
    case 1:
    {
      // An inner scope...
      int x;
    }
    break;
}

答案 1 :(得分: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

答案 2 :(得分:2)

检查是否可以在函数中封装您打算在case-break块中使用的代码。我建议只在case语句中调用函数/方法,但不要使用大型代码块。

另一种可能性是在switch-break中使用{}。 e.g:

case 1:
{
   int i=0;
}
break;

应该有用。

答案 3 :(得分:0)

在性能方面没有显着差异。实际上,在案例中声明变量可能稍微好一点,而不是提前。就可读性而言,最好形成自然的变量组,即在每种情况下声明变量。

答案 4 :(得分:0)

规则陈述declare vars as local as possible 首先要记住,这只是一个非常好的建议,而不是一个实际的规则。

但除此之外,如果所有案例都具有相似的结构,并且您决定在案例之前声明单个变量,那么在这种情况下仍然尽​​可能是本地的。