【发布时间】:2019-07-24 15:23:17
【问题描述】:
当我开始学习 C/C++ 时,在我的第一堂课中,我了解到在代码中使用变量之前,我们必须始终声明变量。所以:
int iterator = 0; // with optional initialization of value accordingly with its use.
for (iterator = 0 ; ; ) // your loop
在这种情况下,我们可以将相同的变量 iterator 重复用于我们想要的任意多个循环,而无需为每个循环声明一个变量。
不过,我最近发现我们也可以在for循环内声明和初始化一个变量:
for (int iterator = 0 ; ; ) // your loop
在这种情况下,iterator 的范围仅在 de for 循环内。由于它用作迭代器,在循环之外没有其他用途,一旦结束,变量就丢失了。
这让我产生疑问:初始化迭代器的最佳方式是什么?¹是否有针对此功能的“最佳实践”?
¹ =(就最高效/或资源 (RAM) 使用/或最快计算而言)
【问题讨论】:
-
没有一种最好的方法。一般来说,最好将变量保持在支持第二种用法的最窄范围内。在实践中,为什么第一个是对于该特定代码最好的原因是有原因的。
-
所有变量的最佳实践往往是最接近您使用它的位置(因此您不必到处寻找)并且在尽可能窄的范围内(因此它不会'不要污染代码的其他部分)。因此,对于循环迭代器,除非您需要使用循环外的值,例如最终计数,否则将其放入循环中。但是,与其像这样迭代,我可以说服您尽可能使用基于范围的
for吗? -
"在这种情况下,我们可以将同一个变量迭代器重复用于尽可能多的循环,而无需为每个循环声明一个变量。" Oof;这实际上与你应该做的相反!
-
在堆栈上声明和使用内置类型(如
int)是免费的,因此您不会因为第二种方式而失去任何东西,而且您获得了安全。所以我推荐第二种方式。