Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';t C++;11当我在同一范围内多次初始化具有相同名称的局部变量时,编译器会抱怨吗?_C++_C++11_Scope_Initialization - Fatal编程技术网

C++ 为什么';t C++;11当我在同一范围内多次初始化具有相同名称的局部变量时,编译器会抱怨吗?

C++ 为什么';t C++;11当我在同一范围内多次初始化具有相同名称的局部变量时,编译器会抱怨吗?,c++,c++11,scope,initialization,C++,C++11,Scope,Initialization,因此,如果我在主函数中初始化一个类型和名称相同的变量,编译器会抱怨重新声明,例如: for (int i = 0; i < 5; i++) { int a{5}; int a{5}; // error int a previously declared here } for(int i=0;i

因此,如果我在主函数中初始化一个类型和名称相同的变量,编译器会抱怨重新声明,例如:

for (int i = 0; i < 5; i++)
{
    int a{5};
    int a{5}; // error int a previously declared here
}
for(int i=0;i<5;i++)
{
int a{5};
int a{5};//前面在这里声明的int a错误
}
但如果我编译此文件,则不会出现错误:

for (int i = 0; i < 5; i++)
{
    int a{5};
}
for(int i=0;i<5;i++)
{
int a{5};
}
据我所知,这看起来好像我在同一范围内多次初始化了“inta”,这显然会导致错误。如果有人能解释到底发生了什么,我们将不胜感激!谢谢

据我所知,这看起来好像我在同一范围内多次初始化了“inta”

关于“多次”部分您是对的,但是关于“相同范围”您是错的:第二个
inta
的范围嵌套在外部范围内,其中声明了第一个
inta
。因此,第二个声明是合法的:它隐藏了语言允许的外部声明

int a = 5;
cout << a << endl;
{
    int a = 6;
    cout << a << endl;
}
cout << a << endl;
据我所知,这看起来好像我在同一范围内多次初始化了“inta”

关于“多次”部分您是对的,但是关于“相同范围”您是错的:第二个
inta
的范围嵌套在外部范围内,其中声明了第一个
inta
。因此,第二个声明是合法的:它隐藏了语言允许的外部声明

int a = 5;
cout << a << endl;
{
    int a = 6;
    cout << a << endl;
}
cout << a << endl;

你似乎混淆了范围和寿命


请注意,这个问题远远超出G++,甚至远远超过C++。每一种C派生的编程语言都是这样工作的。至少我从来没有见过一个不这样做的。

你似乎混淆了范围和生命周期


请注意,这个问题远远超出G++,甚至远远超过C++。每一种C派生的编程语言都是这样工作的。至少我从来没有见过一个不是这样的。

我想你会对声明变量和初始化变量感到困惑

for (int i = 0; i < 5; i++)
{
    int a{5}; // In this part you are declaring and initializing the variable
    int a{5}; // error int a previously declared here
    // same with this case as well
}
for(int i=0;i<5;i++)
{
int a{5};//在这部分中,您声明并初始化变量
int a{5};//前面在这里声明的int a错误
//这个案子也一样
}
如果你想这样做,你可以用这个

 for (int i = 0; i < 5; i++)
    {
         int a{5}; 
         a=5; // error int a previously declared here

     }
for(int i=0;i<5;i++)
{
int a{5};
a=5;//此处先前声明的int a错误
}
此时
inta{5}
这将是for循环范围内变量的声明和初始化


a=5然后在同一范围内重新初始化该特定变量

我认为您会对声明变量和初始化变量感到困惑

for (int i = 0; i < 5; i++)
{
    int a{5}; // In this part you are declaring and initializing the variable
    int a{5}; // error int a previously declared here
    // same with this case as well
}
for(int i=0;i<5;i++)
{
int a{5};//在这部分中,您声明并初始化变量
int a{5};//前面在这里声明的int a错误
//这个案子也一样
}
如果你想这样做,你可以用这个

 for (int i = 0; i < 5; i++)
    {
         int a{5}; 
         a=5; // error int a previously declared here

     }
for(int i=0;i<5;i++)
{
int a{5};
a=5;//此处先前声明的int a错误
}
此时
inta{5}
这将是for循环范围内变量的声明和初始化


a=5并在这里重新初始化同一范围内的特定变量

注意,这不是特定于g++编译器的。它是C++语言规范的一部分。你问为什么循环体的范围不计算多次?每次循环运行时,你都要初始化<代码> A<代码>。注意这不是G++编译器所特有的。它是C++语言规范的一部分。你问为什么循环体的范围不计算多次?每次循环运行时,你都在初始化代码< A/COD>。我不知道OP在外表中有什么地方< <代码> int > />代码。我认为OP询问的是多个循环迭代,每个循环都声明一个
inta{5}变量,表示它们都定义在同一范围内(循环体)。第二个循环迭代没有嵌套在第一个循环中。不,“新的初始化只是在每个循环迭代中嵌套得更深”不是正确的解释。@n.m.在程序空间中没有“循环迭代”这样的东西(循环迭代是在时间空间中相关的)。循环是打开嵌套范围的多种方法之一;这就是它的全部内容。@hvd他将第二个声明嵌套在一个嵌套的作用域中,该作用域恰好由
for
循环打开。存在循环这一事实与解释为什么允许第二次声明无关。@dasblinkenlight在第二种情况下,第二次声明是一个名为
a
的变量。循环变量名为
i
。其他任何地方都没有
a
。我看不出OP的外部作用域中有
int a
。我认为OP询问的是多个循环迭代,每个循环都声明一个
inta{5}变量,表示它们都定义在同一范围内(循环体)。第二个循环迭代没有嵌套在第一个循环中。不,“新的初始化只是在每个循环迭代中嵌套得更深”不是正确的解释。@n.m.在程序空间中没有“循环迭代”这样的东西(循环迭代是在时间空间中相关的)。循环是打开嵌套范围的多种方法之一;这就是它的全部内容。@hvd他将第二个声明嵌套在一个嵌套的作用域中,该作用域恰好由
for
循环打开。存在循环这一事实与解释为什么允许第二次声明无关。@dasblinkenlight在第二种情况下,第二次声明是一个名为
a
的变量。循环变量名为
i
。其他任何地方都没有
a