考虑以下代码片段:
unsigned int i;
double* u = new double [10];
for (i=0; i<10; i++)
{
double u = 5.0;
// Other code
}
delete[] u;
可以使用变量名 u 两次吗?或者这是令人皱眉的?使用某些编译器会无法编译代码吗?
编辑:这样更好吗?或者对于代码的 future 维护者来说仍然感到困惑?
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
}
最佳答案
代码
double u = 5.0;
循环内部将遮蔽定义
double* u = new double [10];
在此之前制作。
循环内的所有代码都只会看到double u
。它的目的是可以很好地编译,除了给 future 的代码维护者带来困惑之外,从语法的角度来看没有任何问题。
注意:
如果您不在循环内使用 double* u,则在其之前定义此变量是没有意义的。根据经验:
Local variable definitions should appear nearest before their first point of usage.
至于您编辑的问题:
是的,这会更清楚,因为人们可以看到在 delete[] u;
之后不应该使用预期的 double* u;
。尽管它既不安全,而且仍然令人困惑,如果没有立即发现循环内部 double u;
的影子定义。
恕我直言,为了不让任何人感到困惑,整体上更好的解决方案是将循环中的代码分解出来,或者将处理 double* u
的代码分解为一个单独的函数,甚至简单地使用不同的变量名称。
关于c++ - C++中使用for循环时的同名变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24827823/