C ++语言中的块范围解析

用户名


我在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;
    }
 }
杰夫

这不可能。内部局部作用域完全遮盖了外部嵌套作用域名称。

最好的办法是在遮盖外部名称之前先创建一个别名:

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 :(
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++语言中的块范围解析

来自分类Dev

C语言中的Objective-C块

来自分类Dev

C语言中的变量声明和范围

来自分类Dev

c语言中程序的范围是什么意思?

来自分类Dev

在C语言中,如果在块范围内声明的对象没有链接,为什么在main()中没有“ extern”的函数声明起作用?

来自分类Dev

解析并计算C语言中的布尔表达式

来自分类Dev

C语言中的JSON解析器提示

来自分类Dev

解析并计算C语言中的布尔表达式

来自分类Dev

C语言中的图形

来自分类Dev

C语言中&&的行为

来自分类Dev

C语言中的For循环

来自分类Dev

在C语言中使用读取时,读取的块大小是否有限制?

来自分类Dev

如何像在C语言中使用#ifdef一样在Perl中禁用代码块?

来自分类Dev

在C语言中,在包含NULL的内存块结束前调用free()是否安全?

来自分类Dev

C ++是否具有指定值范围的比较运算符?(例如E语言中的“ in”)?

来自分类Dev

`strcpy`超出了C语言中字符串数组的范围

来自分类Dev

C语言中for循环中重新声明的变量的混淆范围

来自分类Dev

C语言中的关键事件

来自分类Dev

C语言中的Sizeof(char [])

来自分类Dev

C语言中的OpenMP方法

来自分类Dev

C语言中的多字加法

来自分类Dev

C语言中的下标功能

来自分类Dev

C语言中的无限递归

来自分类Dev

C语言中的“类”行为

来自分类Dev

了解C语言中的fork

来自分类Dev

了解C语言中的realloc()

来自分类Dev

C语言中的Getchar函数

来自分类Dev

C语言中的循环优化

来自分类Dev

C语言中的getlocale()函数