在循环中使用相同的变量名可以吗

Is it OK to use the same variable name in loops?

本文关键字:变量名 循环      更新时间:2023-10-16

我刚开始用C++编程,在编码时,我开始注意到我的代码中有很多for循环,然后我开始思考。

在for循环中,当您创建像for (int **i**=1;i<10;i++)这样的变量时,循环完成后i会发生什么
可以用相同的变量名创建多个for循环吗
在while循环中创建变量怎么样?

。。。循环完成后,i会发生什么?

它超出了范围。

可以用相同的变量名创建多个for循环吗?

是的,这样做是可以的,也是广泛的做法。

在while循环中创建变量怎么样?

while循环内部创建的变量是while循环体的本地变量。它们不同于在for循环头的第一部分中创建的运行变量,后者仅在第一次进入循环之前执行。

在循环中创建的变量是在循环后不会保留相同值的变量。这只是一个时间值。例如,当您使用第一个"i"变量时,此代码将打印i=10。

#include <iostream>
using namespace std;
int main()
{
int i = 0;
for (i = 1; i<10; i++);
cout << i;
return 0;
}

我们在c++中,所以你可以在循环中完美地创建另一个"i"变量,它将具有一个时间值:

#include <iostream>
using namespace std;
int main()
{
int i = 0;
for (int i = 1; i<10; i++);
cout << i;
return 0;
}

它将打印"i"而非时间值,即0。

这取决于,如果您在for()中定义迭代值i,它是一个局部变量,并且只在for()中声明,因此您不应该将它用于for()中的另一个循环(此外,您有充分的理由)。

例如,以下代码将抛出一个错误,因为变量i没有在for()循环之外声明,这意味着它在通用main(){}:内部不可访问

#include<cstdlib>
#include<iostream>
int main()
{
for (int i = 5; i > 0; i--) {
std::cout << "Iteration: " << i << std::endl;
}
std::cout << "Iteration outside of 'for': " << i << std::endl; // Error
return 0;
}

循环完成后,"i"会发生什么

"i"将获得输入条件中指定的最后一个值。

可以用相同的变量名创建多个for循环吗

它将取决于用于运行此代码的语法或语句。

良好做法将为不同的声明分配不同的变量名。

这也属于第一个问题。此外,您需要考虑此代码的位置将在网络、移动应用程序或程序中使用。

在while循环中创建变量怎么样?提前谢谢

最佳实践是在执行任何条件或语句之前创建变量。

ijk这样的通用名称确实很常用,但实际上这是一种常见的不良做法。变量名称应正确反映存储值的用途。例如,如果它用于索引项的向量,那么它应该被命名为item_index,而不仅仅是i。这似乎是不必要的冗长,但当具有通用名称的变量被搞砸时,这种方法有助于避免常见的错误,例如将此frobs[i] = some_frob; bars[j] = some_bar;frobs[bar_index] = some_frob; bars[frob_index] = some_bar;进行比较。事实上,在这种情况下,不仅索引变量名应该是非泛型的,而且变量类型也不应该是非通用的,因此将一种索引类型转换为另一种需要显式强制转换。我认为存在几个通用命名变量的情况类似于三星程序员,因为它永远不应该发生在正确编写的代码中。

在循环范围内声明的变量在循环范围外不可见,所以没有问题。然而,构造for(int i=1;i<10;i++)实际上是一个语法陷阱,因为它忽略了正常的作用域规则,并使在循环作用域外声明的变量i在作用域内可见。这实际上与C不同,C中禁止在for构造内部声明变量。基本上

for(int i = 1; i < 10; ++i)
{
// loop body
}
// i is not visible here
i = 42; // error

在C++中是一个更紧凑的等价于

{
int i;
for(i = 1; i < 10; ++i)
{
/* loop body */
}
}  
/* i is not visible here */
i = 42; /* error */

C.

然而,一些编译器可能会展示非标准行为,并允许在for构造内部声明的变量可见,即使在for循环退出之后也是如此。例如带有/Zc:forScope-的Visual C++

for(int i = 1; i < 10; ++i)
{
// loop body
}
// i is still visible here
i = 42; // no error