C++ C++;访问上层作用域而不是全局作用域

C++ C++;访问上层作用域而不是全局作用域,c++,scope,C++,Scope,您可以在下面找到我的代码及其输出。我应该在“something”中使用什么前缀(或其他什么)来访问中间级别的j(j==2) 我试过了 main::j 但它不起作用 守则: #include <iostream> int j=3;//global using std::cout;using std::endl; int main(){ int j=2;//mid cout<<"inside general main:\n"; cout<<"cout<<

您可以在下面找到我的代码及其输出。我应该在“something”中使用什么前缀(或其他什么)来访问中间级别的j(j==2)

我试过了

main::j

但它不起作用

守则:

#include <iostream>
int j=3;//global
using std::cout;using std::endl;
int main(){
int j=2;//mid
cout<<"inside general main:\n";
cout<<"cout<<j---"<<j<<endl;//prints 2
cout<<"cout<<::j---"<<::j<<endl;//prints 3
cout<<"inside for loop:\n";
for(int i=0;i<1;i++){
    int j=1;//inside
    cout<<"cout<<j---"<<j<<endl;//prints 1
    cout<<"cout<<::j---"<<::j<<endl;//prints 3
    //cout<<"cout<<::j---"<<SOMETHING<<endl;//prints 2
}
return 0;
}
#包括
int j=3//全球的
使用std::cout;使用std::endl;
int main(){
int j=2;//中间

cout没有涉及局部范围的限定


只需使用不同的名称。

一个解决方案是首先不要对变量进行阴影处理,这是一个糟糕的习惯。无法获得以前的范围。对变量使用合理的命名,希望不会发生这种情况。一些开发人员/团队有一种根据其范围区分名称的命名约定,例如,我见过前缀(m_u表示成员,s_u表示静态,g_u表示全局,t_u表示线程本地等)或后缀(有些地方使用u表示成员变量,有些地方使用u表示函数参数)我知道这是一个坏习惯。我正在读C++书,我在阅读关于本地和全局访问相同名称的变量,但是没有看到任何相同名称的中间元素。我的问题纯粹是教育。避免成员变量的<代码> <代码>代码前缀。我听说它很危险,可能是因为已经存在了。代码>.
前缀符号。例如,更喜欢
m.
。你能参考我在这个问题下的最后一句话吗?也许你的意思是“有办法通过这个程序获得所有分配的内存单元的列表吗?”。不。是的,我是指那个问题。好的,那么不,没有这样的工具。提示:你可以使用像AStyle(艺术风格)这样的免费工具自动格式化您的代码。
inside general main:
cout<<j---2
cout<<::j---3
inside for loop:
cout<<j---1
cout<<::j---3