如何在c ++中访问特定的范围?

时间:2014-10-11 00:34:22

标签: c++ scope

#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。 对不起我的英语我希望能理解这个问题

2 个答案:

答案 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

这不应该在生成的代码中花费更多内存,并且可以保持外部名称不变。如果你故意在一个函数中发生名称冲突,那么可能会让人感到困惑和容易出错。这是抽象代码所以很难批评,但是大多数具有这种模式的具体代码应该以另一种方式完成。