#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;
}
在这个简单的例子中,我使用代码块,我知道我可以使用Scope resolution运算符修改全局变量。 我修改了这个例子中的全局变量,但我不知道是否有办法修改特定范围内的变量,如main函数(不需要(Scope resolution operator)方式) 这意味着在这个例子中我需要第一个输出是24而下一个是7。 对不起我的英语我希望能理解这个问题
答案 0 :(得分:2)
无法在C ++中访问特定范围的变量。
如果在内部作用域中声明一个对象或变量,其名称与对象或外部作用域中的变量相同,那么对于所有意图和目的,外部作用域的对象或变量不是直接可见的在内在范围内。
如果您已经拥有指向外部作用域对象的指针或引用,您当然仍可以间接访问它。你无法直接访问它。
这是C和C ++的基本概念;但许多其他编程语言都有相同的类似概念。
答案 1 :(得分:0)
C ++的范围规则是文本和AFAIK,你不能这样做,因为你不能把命名空间放在函数中。但是如果您发现自己处于这样的绑定中,引入具有唯一名称的引用可能会帮助您解决此问题:
#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
这不应该在生成的代码中花费更多内存,并且可以保持外部名称不变。如果你故意在一个函数中发生名称冲突,那么可能会让人感到困惑和容易出错。这是抽象代码所以很难批评,但是大多数具有这种模式的具体代码应该以另一种方式完成。