【问题标题】:Local variables name collision [duplicate]局部变量名称冲突[重复]
【发布时间】:2020-05-27 20:05:30
【问题描述】:

如果我在封闭块中定义了一个变量,而在嵌套块中定义了另一个同名变量,我如何从嵌套块中的封闭块访问变量?

int main ()
{
    int i = 0;
    {
        int i;
        i = 10;
    }
    cout << i; // prints 0
}

【问题讨论】:

  • 给它一个更好的名字?

标签: c++


【解决方案1】:

你有 "shadowed" 之前的定义,所以它基本上没有了。如果您需要访问它,请选择其他名称。就编译器而言,在那个内部块中只有一个i,它不知道它替换的另一个i

或者给它一个更好的名字:

int i = 0;
{
    int ii;
    i = 10;
}
cout << i; // prints 10

或者使用函数:

int i = 0;
f(i);
cout << i; // Depends on what f() does.

你在哪里:

void f(int& i) {
  i = 10;
}

修改原来的i

【讨论】:

    【解决方案2】:

    如果可以的话……

    重命名:

    int main ()
    {
        int i = 0;
        {
            int j;
            i = 10;
        }
        cout << j; // prints 10
    }
    

    如果你不能..

    没办法。内部作用域中的i 遮蔽了外部作用域中的i。声明同名变量后,无法从外部范围访问i

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 2013-03-26
      • 2023-03-21
      相关资源
      最近更新 更多