当我开始学习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
的范围仅在for
循环内。因为它用作迭代器,并且在循环外没有其他用途,所以一旦结束,该变量就会丢失。
哪个会引起我一个问题:初始化迭代器的最佳方法是什么?¹此功能是否有“最佳实践”?
¹=(以最有效的/或资源(RAM)使用率/或最快的计算速度)
答案 0 :(得分:4)
迭代器一词在C ++中具有特定含义,而这并不是迭代器。通常称为计数器或循环变量。
(根据最有效的/或资源(RAM)的使用/或最快的计算)
在上述情况下,这些术语实际上没有任何区别。
通常最好的设计是使变量的范围尽可能小。在这种情况下,可以通过在循环的init-statement中声明计数器来实现。遵循这种经验法则通常可以使编译器更容易地减少内存使用,更重要的是,可以减少需要使用该算法的程序员的认知负担。
有些算法在循环后需要计数器的最终值。可以通过将变量范围提升到循环范围之外来适应这种算法。
答案 1 :(得分:3)
¹=(以最有效的/或资源(RAM)使用率/或最快的计算速度)
通常,就这些指标而言,它们是等效的;任何现代的编译器都将在函数入口处静态分配堆栈帧,并跨作用域重用空间。您可以轻松地here看到两个函数生成的代码完全相同。
此外,整数变量不需要任何特殊的初始化 1 ,因此,这与在每个循环中创建新的变量并不意味着运行时会付出任何代价。
因此,作为一个经验法则,您应该套用通常的规则,将每个变量保持在最窄的所需范围内,以减少阅读时的认知负担(您立即知道,该变量仅在内部具有含义该循环,无需担心稍后会使用它的值,无需在寻找它的定义时四处寻找它,并减少了发生错误的风险(例如,稍后不重新初始化它并重新使用其过时的值)。