请考虑以下代码段:
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
}
答案 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)
这适用于大多数编译器。但是,这通常不是一个好习惯,因为它可能导致程序员的混淆,特别是如果程序变大。