Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尽可能在本地声明变量和switch语句_C++_C_Switch Statement - Fatal编程技术网

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

C++ 尽可能在本地声明变量和switch语句,c++,c,switch-statement,C++,C,Switch Statement,一些著名的代码风格书籍建议将vars声明为尽可能本地的( ) 我的问题是:switch语句是否免于遵守此规则?例如,如果所有(或大多数)案例都具有类似的结构,并且它们都使用字符串来表示类似的内容,那么应该在每个案例中声明该字符串还是在切换之前声明该字符串?在性能方面没有明显的差异。事实上,在案例中声明变量可能比预先声明要好一些。就可读性而言,最好形成自然的变量组,即在每个案例中声明变量。规则规定将变量声明为尽可能局部的 首先,请记住,这只是一个非常好的建议,而不是一个实际的规则 但是除此之外,如

一些著名的代码风格书籍建议将vars声明为尽可能本地的( )

我的问题是:switch语句是否免于遵守此规则?例如,如果所有(或大多数)案例都具有类似的结构,并且它们都使用字符串来表示类似的内容,那么应该在每个案例中声明该字符串还是在切换之前声明该字符串?

在性能方面没有明显的差异。事实上,在案例中声明变量可能比预先声明要好一些。就可读性而言,最好形成自然的变量组,即在每个案例中声明变量。

规则规定
将变量声明为尽可能局部的

首先,请记住,这只是一个非常好的建议,而不是一个实际的规则

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

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

我建议你尽量把它们放在本地

注意:

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;
}
开关(1){
案例1:int x=0;//初始化

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

另一种可能是在开关中断内使用{},例如:

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

应该有效。

代码样式是建议,而不是硬性规则。它们通常是促进代码重用和可读性的好建议,但它们仍然只是建议。与所有建议一样,用户(在本例中是您)也可以需要考虑的是什么时候他们应该被跟踪,什么时候他们不那么重要……而且通常如果不清楚的是需要发布它,那就没那么重要了。- 1,“在性能方面没有差别。”这是一个过早的结论,即使它相当合理。@potatostater一切都需要在某个点上初始化。我无法想象任何变化,无论它发生在case内部还是在切换之前。无论如何,任何半体面的编译器都可以移动公共元素。任何获取资源的对象在case bl时都会产生影响不使用它的OCK会被执行。即使影响很小。优化通常包括组合相关操作以跳过不必要的步骤。如果编译器可以判断在某种情况下字符串是用一些字符初始化的,那么它不需要预先将其初始化为空,而是在
开关之前声明它可能会迫使它这样做。这是否会产生可测量的差异取决于应用程序。@CaptainObvlious因此,就性能而言,将内容放入案例中会更好。我猜我的答案过于保守,倾向于使用案例内部方法。稍微编辑我的答案以反映这一点。
默认值
块应如果只是为了一致性,也同样要受到保护。
case 1:
{
   int i=0;
}
break;