声明变量的最佳位置在哪里?

时间:2013-11-06 23:33:11

标签: c++ variable-declaration

我正在尝试用C ++优化我已经实现的程序并且想到了一个问题...... 如果我有一个使用它的重复结构,我应该在哪里声明一个变量?

例如:

//1-> int sum;
int matrix[10][10];

for(int i = 0; i < n; i++){
    //1-> sum=0;
    //2-> int sum=0;
    for(int j = 0; j < n; j++)
        sum += matrix[i][j];

    printf("%d ", sum);
}

哪个更好/推荐?我应该在重复结构之外的开头// - &gt; 1声明它,如果在每次迭代时重新声明// - &gt; 2就可以了吗? 我的猜测是声明需要很短的时间(毫秒或更短)但是如果你在一个足够大的重复结构(或在多个结构内)重新声明它,每次重新声明都会增加一些额外的秒数。

3 个答案:

答案 0 :(得分:5)

对于int,这无所谓。对于具有非平凡构造函数或析构函数的类型,在方案2下,它将在每次通过外循环时被构造和销毁,这可能是耗时的。

答案 1 :(得分:2)

没关系。堆栈(存储器中的保留空间)在函数/方法的开头一起分配。如果它是一个对象,那么将在循环范围内的某处调用构造函数和析构函数。但对于元素类型,绝对没有区别。

答案 2 :(得分:1)

正如其他人已经说过的那样,int几乎无关紧要。

这里只有两件事需要关注:

  1. 可读性
  2. 范围
  3. 如果在int循环之前声明for而不是for循环的第一行,则可读性可能大致相同。此外,许多编译器都有直接跳转到声明的快捷方式。

    对于Scope,如果你不需要循环外的变量,把它放在里面有助于确保你不会以任何方式意外地在循环外使用它。如果你确实在循环之外需要它,你真的没有太多选择。


    关于我的个人偏好的注释,它结合了范围和可读性问题,当我编写代码时,我更喜欢我将在该范围的开头声明的给定范围中使用的每个变量。我在main中使用的任何变量都在main的顶部声明。函数中使用的任何变量都在该函数的顶部声明。循环中使用的任何变量都在该循环的顶部声明。 if语句中使用的任何变量都在if语句的顶部声明。我个人很少例外。因此,在您的情况下,如果scope的{​​{1}}仅限于您的sum循环,我会将其声明为for循环的第一个变量。如果for需要在循环之外的范围,我会将它声明为您所在的任何函数的顶部,并为其提供更具描述性的名称。