代码之家  ›  专栏  ›  技术社区  ›  Mateen Ulhaq

C++中的变量作用域

  •  9
  • Mateen Ulhaq  · 技术社区  · 14 年前

    for(int myvar = 0; myvar < 10; myvar++);
    if(1)
    {
        int var2 = 16;
    }
    

    后来,我写了如下:

    myvar = 0;
    var2 = 0;
    

    这合法吗?

    5 回复  |  直到 14 年前
        1
  •  10
  •   paxdiablo    7 年前

    VC6相当老了,并不总是。。。僵硬的。。。在标准的应用中: 泄漏的

    for (int i = 0; i < 10; i++) { }
    // You can still use 'i' here.
    

    这导致了一些 funky macro magic 来解决这个问题。如果您使用的是符合ISO的编译器,那么您尝试做的这两件事都是非法的。

    3.3.3/1 ,处理块范围的引入 {...} :

    剖面图 6.5.3 for 声明:

    如果 for-init-statement 是声明,声明的名称的范围扩展到 for-statement

        2
  •  17
  •   Matthew Flaschen    14 年前

    不,不会是(§3.3.2本地范围):

    1. 块(6.3)中声明的名称是该块的本地名称。它的潜力 范围开始于 声明(3.3.1)结束于 其声明区域的结尾。

    我建议您使用最近十年发布的编译器。

        3
  •  4
  •   Aamir    14 年前

    这应该是违法的,但VC6在这方面做得很糟糕。

    “强制For循环作用域中的一致性”

    然而,微软在VS2005中做的一件事是正确的,它在默认情况下打开了这一功能,从而更接近标准。

        4
  •  1
  •   Prasoon Saurav    14 年前

    不,这不应该是合法的。转储VC++ 6。使用新的更好的编译器。

        5
  •  1
  •   Ian    9 年前

    VC花了大约十年的时间来实现循环和条件语句中声明的变量的适当范围。一般来说,你不能依赖VC6的C++判断。