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