#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;
}
在这个简单的例子我使用的代码块,我知道我可以修改使用范围解析操作的全局变量。 我修改全局变量在这个例子中,但我不知道是否有修改状主要功能的具体范围(没有必要的(范围解析运算符)的方式),意味着变量在这个例子中我首先需要的输出是24路和下一个7。 对不起,我的英语我希望了解的问题
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
这不应该花费在生成的代码任何更多的内存,并且可以让你保持外名称不变。 不过,容易混淆,而且容易出错,如果你有意具有如下功能内的名称冲突。 这是抽象的代码,所以很难去批评,但这种模式最具体的代码也许应该做的另一种方式。
没有从在C ++中的特定范围的访问的变量的装置。
如果你声明的对象或对象具有相同名称在内部范围内的变量或在外部范围的变量,那么对于所有意图和目的,即外部范围的对象或变量是不能直接在内部范围可见。
如果你已经有一个指针或外部范围的对象的引用,当然,你仍然可以直接访问它。 你不能直接访问它。
这是C和C ++的一个基本概念; 但许多其他编程语言共享同一个类似的概念。