C++ 在下面的代码中,外部块m如何给出输出20

C++ 在下面的代码中,外部块m如何给出输出20,c++,C++,在这个代码中,我不明白外部块的m如何变成20: #include <iostream> using namespace std; int m=10; int main() { int m=20; { int k=m; int m=30; cout<<"inner block"<<endl; cout<<"k="<<k<<endl;

在这个代码中,我不明白外部块的
m
如何变成
20

#include <iostream>

using namespace std;
int m=10;

int main()
{
    int m=20;

    {
        int k=m;
        int m=30;
        cout<<"inner block"<<endl;
        cout<<"k="<<k<<endl;
        cout<<"m="<<m<<endl;
        cout<<"::m="<<::m<<endl;
    }

    cout<<"we are in outer block";
    cout<<"m= "<<m<<endl;
    cout<<"::m= "<<::m<<endl;
    return 0;
 }
#包括
使用名称空间std;
int m=10;
int main()
{
int m=20;
{
int k=m;
int m=30;

cout局部变量是仅存在于大括号之间的变量,在大括号中声明了它。在大括号之外,它们不可用,并导致编译时错误。如果我们在范围之外声明同一个局部变量,它将具有范围之外的值。

你说的“它如何在外部块中变为20”是什么意思您将其设置为等于20:
int m=20;
m将在内部块中用30重新清除。因此,为什么仍在外部块中,它会给m值20内部范围中的重新声明是一个新变量。它会掩盖外部范围中的变量。但是,外部范围中的变量仍然存在,并且不受inne变量赋值的影响r范围。你知道你有三个不同的
m
变量吗?它们不是同一个。这与范围分辨率有关。因为在你打印值的范围内m=20,它打印20