循环内变量的定义
Definition of variable inside loop
我在许多页面上寻找问题的答案,但找不到。
在这种情况下,我们定义变量,并在每个循环中重新初始化它:
while(1)
int k = 7;
在这种情况下,我们在循环之前定义变量,并在每个循环中重新初始化它。
int k;
while(1)
k = 7;
使用这两种方法有什么优点或缺点?或者也许这没什么区别?
区别在于变量的作用域。
在第一种情况下,一旦while
循环结束,就无法访问变量k
。
在第二种情况下,可以在while
循环之外访问变量k
。
在这两种情况下,变量都是在堆栈上定义的(或者正如TartanLlama所指出的,它们可以在寄存器中分配),因此在性能方面没有差异。
但是,在while
循环永远不会结束的情况下,您使用的示例是错误的。我猜这只是一段用来解释这种情况的伪代码。
这取决于您的逻辑。如果你需要循环外的变量(例如,在循环后检查值),那么你必须在循环外定义它;如果它只在循环内部使用,那么您只能在内部定义它。
从分配的角度来看,在这两种情况下,变量都可能在堆栈上分配(即使在某些情况下编译器可能选择使用寄存器),因此性能没有差异。
通常情况下,变量被声明为最接近其使用位置的。如果变量仅在循环中使用,则在循环中声明它。
相关文章:
- 在头文件中定义变量不会出错
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 在命名空间中定义变量
- 是否可以在C++中基于程序集输出(.dll或.exe)定义变量
- 用不同类型重新定义变量
- 具有全局定义变量的递归比没有全局定义变量的递归函数获得更多的堆栈.为什么?(跳入C++)
- 定义变量类型
- 在命名空间中定义变量,但在测试中获取空值
- cmake没有定义变量
- C 中的继承:在亲子类中定义变量
- 在同一函数中定义变量及其静态等效项
- 如何在 Tensorflow C++ 中定义变量的自定义有状态 Op 保存值
- 如何将 int 和 int* 传递到函数中以定义变量
- 在定义变量时调用类函数
- 定义变量与模板
- 定义变量类型
- 为什么您可以在 switch 语句中的"默认"下定义变量,而不能在"case"下定义变量
- C 如何基于另一个变量和某些算术定义变量的值
- C 可以指向具有定义变量的函数
- C 定义变量设置值