在C ++中使用for循环时具有相同名称的变量

时间:2014-07-18 14:47:30

标签: c++ for-loop scope

请考虑以下代码段:

unsigned int i;
double* u = new double [10];

for (i=0; i<10; i++)
{
    double u = 5.0;
    // Other code
}

delete[] u;

可以使用变量名称u两次吗?或者这不赞成?代码是否无法使用某些编译器进行编译?

编辑:这样更好吗?或者是否仍然会让代码的未来维护者感到困惑?

unsigned int i;
double* u = new double [10];
// Do stuff with u
delete[] u;

for (i=0; i<10; i++)
{
    double u = 5.0;
    // Other code
}

2 个答案:

答案 0 :(得分:4)

代码

double u = 5.0;

循环内部将影响定义

double* u = new double [10];

之前做的。
循环中的所有代码都只看到double u。这意味着要编译好,除了为代码的未来维护者引入混淆之外,从语法的角度来看,没有什么不对。


注意:
如果你没有在循环中使用double* u,那么在它之前没有定义这个变量的点。根据经验:

  

局部变量定义应该在它们的第一个使用点之前出现最近。


至于您编辑过的问题:
是的,这将更清晰,因为人们可以看到double* u;之后不应该使用意图delete[] u;。虽然它不安全,但仍然令人困惑,如果没有立即在循环内部发现double u;的阴影定义。

恕我直言总体更好的解决方案,不要混淆任何人,将分解循环中的代码,或处理double* u的代码到一个单独的函数,或甚至简单地使用不同的变量名称。

答案 1 :(得分:1)

这适用于大多数编译器。但是,这通常不是一个好习惯,因为它可能导致程序员的混淆,特别是如果程序变大。