0

我正在尝试用 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);
}

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

4

3 回答 3

5

对于一个int它只是无关紧要。对于具有非平凡构造函数或析构函数的类型,在方案 2 下,每次都会通过外循环构造和销毁它,这可能会很耗时。

于 2013-11-06T23:35:50.797 回答
2

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

于 2013-11-06T23:34:58.177 回答
1

正如其他人已经说过的那样,对于int.

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

  1. 可读性
  2. 范围

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

至于 Scope,如果您不需要循环外部的变量,将其放入内部有助于确保您不会以任何方式在循环外部意外使用它。如果你确实需要它在循环之外,你真的没有太多选择。


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

于 2013-11-06T23:38:40.410 回答