循环中的变量范围

时间:2017-01-07 16:57:32

标签: c++ scope

我总是认为在任何类型的循环语句中声明的变量仅限于该语句。在类似的问题中略微探讨似乎证实了这个想法。所以我对Stroustrup的 C ++之旅(§4.2.3初始化容器第38页)中的以下摘录感到困惑:

push_back()对于输入任意数量的元素很有用。例如:

Vector read(istream& is) {
    Vector v;
    for (double d; is>>d;) // read floating-point values into d
        v.push_back(d); // add d to v
    return v;
}

输入循环由文件结尾或格式错误终止。在此之前,每个号码 read被添加到Vector,以便最后v的大小是读取的元素数。 我使用for语句而不是更传统的while语句来保持d的范围仅限于循环。

这似乎意味着在while语句的条件下声明的变量在语句体之外仍然存在。

2 个答案:

答案 0 :(得分:4)

  

[..]表示在while语句[...]

的条件下声明的变量

那是不可能的。

使用for语句可以声明像这样的变量

for(int a = 0; a < 5; a++) {
    // Use a
}
// a is not visible anymore

如果使用while循环,则可见

int a = 0;
while(a < 5) {
    // Use a
    a++;
}
// a still visible

答案 1 :(得分:4)

让我们检查一下这个循环:

for (double d; is>>d;) // read floating-point values into d
    v.push_back(d); // add d to v

我们有:

  • d
  • 的声明
  • 循环条件
  • 空的&#34;每次迭代都做&#34;表达

而且,是的,d的范围仅限于for循环。

现在尝试编写while循环来执行相同的工作,使d的范围受限。你不可能,因为在while的序言中没有地方可以申报。只有for具有该功能。 while只有一个条件。

这并不意味着while的范围规则不同;它只表示无法使用while编写此代码。 不是while语句&#34;的条件下声明的任何&#34;变量。