如何在 C++ 中访问特定范围

how to access a specific scope in c++?

本文关键字:范围 访问 C++      更新时间:2023-10-16
#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;
} 

在这个简单的示例中,我正在使用代码块,我知道我可以使用范围解析运算符修改全局变量。我在这个例子中修改了全局变量,但我想知道是否有办法修改特定范围内的变量,如main函数(不需要(范围解析运算符(方式(这意味着在这个例子中,我需要第一个输出是 24,下一个是 7 .对不起我的英语,我希望能理解这个问题

无法

从C++中的特定范围访问变量。

如果在内部作用域中声明与外部作用域

中的对象或变量同名的对象或变量,则对于所有意图和目的,该外部作用域的对象或变量在内部作用域中不直接可见。

当然,如果已经有指向外部作用域对象的指针或引用,您仍然可以间接访问它。您只是无法直接访问它。

这是C和C++的基本概念;但许多其他编程语言共享相同的类似概念。

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

这不应该在生成的代码中花费更多的内存,并允许您保持外部名称不变。 尽管如此,如果您故意在函数中发生名称冲突,可能会令人困惑且容易出错。 这是抽象代码,因此很难批评,但大多数具有这种模式的具体代码可能应该以另一种方式完成。