如何在c++;? #包括 使用名称空间std; int x=24; int main() { int x=0; { int x=5; ::x=x+2; } CUT没有任何方法可以从C++中的特定范围访问变量。

如何在c++;? #包括 使用名称空间std; int x=24; int main() { int x=0; { int x=5; ::x=x+2; } CUT没有任何方法可以从C++中的特定范围访问变量。,c++,scope,C++,Scope,如果在内部作用域中声明的对象或变量与外部作用域中的对象或变量同名,则出于所有目的,外部作用域的对象或变量在内部作用域中不直接可见 当然,如果你已经有一个指向外部作用域对象的指针或引用,你仍然可以间接地访问它,只是不能直接访问它 这是C和C++的基本概念,但是许多其他编程语言有着相同的相似概念。 < P> C++的范围规则是文本的,而且你不能这样做,因为你不能把名字空间放在函数里面。但是如果你发现自己在一个名字中,引用一个唯一的名字可以帮助你做一个解决办法。像这样绑定: #include <

如果在内部作用域中声明的对象或变量与外部作用域中的对象或变量同名,则出于所有目的,外部作用域的对象或变量在内部作用域中不直接可见

当然,如果你已经有一个指向外部作用域对象的指针或引用,你仍然可以间接地访问它,只是不能直接访问它


这是C和C++的基本概念,但是许多其他编程语言有着相同的相似概念。

< P> C++的范围规则是文本的,而且你不能这样做,因为你不能把名字空间放在函数里面。但是如果你发现自己在一个名字中,引用一个唯一的名字可以帮助你做一个解决办法。像这样绑定:

#include <iostream>
using namespace std;
int x=24 ;
int main()
{
     int x=0;
     {
         int x=5 ;
        ::x= x+2 ;
     }
    cout<<::x<<endl  ;//first 
    cout<<x<<endl ; // second 
    return 0;
} 

这不应在生成的代码中占用更多内存,并允许您保持外部名称不变。但是,如果您有意在函数中发生名称冲突,则可能会产生混淆和错误。这是抽象代码,因此很难批评,但大多数具有这种模式的具体代码可能应该以另一种方式完成。

问题在于,在赋值(第9行)中,你用7覆盖了24,因此全局x==7,主x==0,内部x丢失。请不要随便拿这个例子,你知道在这个范围内修改主x的方法吗
#include <iostream>
using namespace std;
int x = 24;
int main()
{
     int x = 0;
     int & main_outer_x = x;
     {
         int x = 5;
         main_outer_x = x + 2;
     }
    cout << ::x << endl; //first 
    cout << x << endl; // second 
    return 0;
}
24
7