如何在 C++ 中访问特定范围
how to access a specific scope in 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;
}
在这个简单的示例中,我正在使用代码块,我知道我可以使用范围解析运算符修改全局变量。我在这个例子中修改了全局变量,但我想知道是否有办法修改特定范围内的变量,如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
这不应该在生成的代码中花费更多的内存,并允许您保持外部名称不变。 尽管如此,如果您故意在函数中发生名称冲突,可能会令人困惑且容易出错。 这是抽象代码,因此很难批评,但大多数具有这种模式的具体代码可能应该以另一种方式完成。
相关文章:
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何访问超出其块范围的对象?
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 如何在C++中访问有序映射中的键的范围/间隔?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- 我无法访问变量的值,即使我通过范围传递了它
- 限制多模板参数朋友函数可访问的类实例的范围
- 访问基于范围的循环(如for_each)中的std::map迭代器
- 如何访问范围外的类?
- 无法从另一个函数访问文件范围变量的内容
- 我们如何准备小内存池,其中每个线程可以独立访问某些位置范围?
- 枚举范围无法通过 C++ 中的类中的结构访问
- x64 DLL 堆栈访问超出范围?
- 为什么这个循环变量在循环范围之外是可访问的
- C++数组超出范围访问以计算指针有效?
- 删除复制构造函数和运算符=类范围访问
- C++嵌套范围访问
- 从 Outsie it 范围 C++ 访问局部变量
- 为什么从C++11中删除了对范围访问