变量的重新声明
Redeclaration of a variable
请考虑以下代码。
代码 1
using namespace std;
int main ()
{
for (int ii = 0; ii < 2; ii++)
{
int a = 0;
}
return 0;
}
代码 2
using namespace std;
int main ()
{
int a = 0;
int a = 0;
return 0;
}
看来这两个代码是等价的。但是,当我运行第二个的时候,报如下错误:
[Error] redeclaration of 'int a'
[Error] 'int a' previously declared here
为什么会这样?
它们不一样。
using namespace std;
int main ()
{
for (int ii = 0; ii < 2; ii++)
{
int a = 0;
}
return 0;
}
这里声明并初始化一个变量a
一次。然后在再次执行循环体时销毁并重新创建它。
using namespace std;
int main ()
{
int a = 0;
int a = 0;
return 0;
}
此处您在同一范围内声明和初始化一个变量 a
两次,这是不允许的。
可以在内部范围内重新声明变量。这称为 阴影。但是,您要做的是在 相同的 范围内重新声明变量。
for (...) {
int a = 0;
}
这会多次创建变量 a
。在每次迭代结束时,变量被释放并创建一个新变量。
int a = 0;
for (...) {
int a = 1;
}
这个类似。第二个 a
是一个只存在于循环内部的新变量。一旦循环结束,原来的 a
又回来了,仍然有值 0
.
int a = 0;
int a = 1;
在这里,我们试图在同一范围内创建两个同名的变量。 C++ 标准明确不允许这样做。没有任何机械原因必须禁止这样做,但是由于几乎没有理由 故意 这样做,标准禁止这样做,因为您更有可能打算这样做做一个任务。如果你真的想要两个具有相同名称的变量,你可以使用显式块。
int a = 0;
{
int a = 1;
}
但确实没有理由这样做。
请考虑以下代码。
代码 1
using namespace std;
int main ()
{
for (int ii = 0; ii < 2; ii++)
{
int a = 0;
}
return 0;
}
代码 2
using namespace std;
int main ()
{
int a = 0;
int a = 0;
return 0;
}
看来这两个代码是等价的。但是,当我运行第二个的时候,报如下错误:
[Error] redeclaration of 'int a'
[Error] 'int a' previously declared here
为什么会这样?
它们不一样。
using namespace std;
int main ()
{
for (int ii = 0; ii < 2; ii++)
{
int a = 0;
}
return 0;
}
这里声明并初始化一个变量a
一次。然后在再次执行循环体时销毁并重新创建它。
using namespace std;
int main ()
{
int a = 0;
int a = 0;
return 0;
}
此处您在同一范围内声明和初始化一个变量 a
两次,这是不允许的。
可以在内部范围内重新声明变量。这称为 阴影。但是,您要做的是在 相同的 范围内重新声明变量。
for (...) {
int a = 0;
}
这会多次创建变量 a
。在每次迭代结束时,变量被释放并创建一个新变量。
int a = 0;
for (...) {
int a = 1;
}
这个类似。第二个 a
是一个只存在于循环内部的新变量。一旦循环结束,原来的 a
又回来了,仍然有值 0
.
int a = 0;
int a = 1;
在这里,我们试图在同一范围内创建两个同名的变量。 C++ 标准明确不允许这样做。没有任何机械原因必须禁止这样做,但是由于几乎没有理由 故意 这样做,标准禁止这样做,因为您更有可能打算这样做做一个任务。如果你真的想要两个具有相同名称的变量,你可以使用显式块。
int a = 0;
{
int a = 1;
}
但确实没有理由这样做。