我正在用c ++程序进行练习,我在这里发布了一个给我提问的程序的一部分。
int max=100;
main()
{ int max=50;
{
int max=25;
printf("%d",max);
printf("%d",::max);
//output will be 25 and 100
// I wanted to use value "50" of max in this block i.e. the max variable of above block which is local to main
// and I can't figure out how to do this.
}
}
我知道::运算符会使用Global覆盖local的优先级,但是我希望将它用于一个块级别。请帮帮我。我在书中和互联网上看到了一些参考文献,实际上我确实倒退了(首先是互联网,然后是书籍),但我无法弄明白。请帮帮我。
我原来的代码是:
int max=100;
void main()
{
int max=50;
char str[50];
gets(str);
if(strlen(str)>5)
{
int max=25;
cout<<"Max here is"<<max<<endl;
cout<<"Max above was"<</*max value of above block*/;
cout<<"Max Global"<<::max;
}
}
答案 0 :(得分:1)
这是不可能的。内部局部范围完全遮蔽外部嵌套范围名称。
您可以做的最好的事情是在遮蔽外部名称之前创建别名:
int max = 100;
int main() {
int max = 50;
{
int &m_max = max; // make reference alias first!
int max = 25;
printf("%d %d %d\n", max, m_max, ::max); // have to use alias name :(
}
}
答案 1 :(得分:0)
您不能在内部块中执行变量max visible的第二个声明,因为内部块中具有相同名称的变量会隐藏它。您只能将限定名称用于在名称空间或类作用域中声明的变量。
在您的示例中,您使用限定名::max
来访问在全局名称空间中声明的变量。