1

见下面的代码:

public static int Main()
{
    int j = 20;
    for (int i=0; i < 10; i++)
    {
        int j = 30;    //can't do this
        Console.WriteLine(j + i);
    }
    return 0;
}

C# 中发生错误,因为这里它不进行变量隐藏并给出错误:

不能在此范围内声明名为“j”的局部变量,因为它会给已在“父或当前”范围中使用的“j”赋予不同的含义。

如果我们在 c++ 中运行上面的程序,它可以工作,在 c++ 中它支持在这种情况下隐藏变量。

现在我的问题是,这背后的原因是什么?
为什么 C# 开发者决定不支持隐藏在这里。?
为什么 C++ 允许隐藏在这里?

4

3 回答 3

3

C++ 保留这样的内容是为了与 C 兼容。这在 C 中是允许的,因此在 C++ 中也是允许的。

C# 没有也不需要兼容性。所以这个“隐藏”被淘汰了。

于 2012-11-15T13:49:52.843 回答
2

这些事情的答案总是一样的:因为没有人评估、指定、设计、实施、测试、记录、交流、翻译和支持该功能。在这种情况下,我会想象只是因为没有明显的好处(您可以只使用不同的变量名称,从而避免所有歧义问题),并且由于遗留原因而没有预先存在的需要具有该功能。

于 2012-11-15T13:50:32.037 回答
0

理由是认为在同一个函数中有两个变量可能会造成混淆并且没有必要。

于 2012-11-15T13:54:26.973 回答