我正在尝试用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就可以了吗? 我的猜测是声明需要很短的时间(毫秒或更短)但是如果你在一个足够大的重复结构(或在多个结构内)重新声明它,每次重新声明都会增加一些额外的秒数。
答案 0 :(得分:5)
对于int
,这无所谓。对于具有非平凡构造函数或析构函数的类型,在方案2下,它将在每次通过外循环时被构造和销毁,这可能是耗时的。
答案 1 :(得分:2)
没关系。堆栈(存储器中的保留空间)在函数/方法的开头一起分配。如果它是一个对象,那么将在循环范围内的某处调用构造函数和析构函数。但对于元素类型,绝对没有区别。
答案 2 :(得分:1)
正如其他人已经说过的那样,int
几乎无关紧要。
这里只有两件事需要关注:
如果在int
循环之前声明for
而不是for
循环的第一行,则可读性可能大致相同。此外,许多编译器都有直接跳转到声明的快捷方式。
对于Scope,如果你不需要循环外的变量,把它放在里面有助于确保你不会以任何方式意外地在循环外使用它。如果你确实在循环之外需要它,你真的没有太多选择。
关于我的个人偏好的注释,它结合了范围和可读性问题,当我编写代码时,我更喜欢我将在该范围的开头声明的给定范围中使用的每个变量。我在main
中使用的任何变量都在main
的顶部声明。函数中使用的任何变量都在该函数的顶部声明。循环中使用的任何变量都在该循环的顶部声明。 if
语句中使用的任何变量都在if
语句的顶部声明。我个人很少例外。因此,在您的情况下,如果scope
的{{1}}仅限于您的sum
循环,我会将其声明为for
循环的第一个变量。如果for
需要在循环之外的范围,我会将它声明为您所在的任何函数的顶部,并为其提供更具描述性的名称。