c++ - 循环中变量的范围

标签 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 语句的条件中声明的变量在语句体之外持续存在。

最佳答案

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

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

这里有:

  • d的声明
  • 循环条件
  • 一个空的“每次迭代执行”表达式

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

现在尝试编写一个 while 循环来完成同样的工作,将 d 限制在范围内。您将无法这样做,因为没有地方可以在 while 的序言中放置声明。只有 for 具有该功能。 while 只有一个条件。

这并不意味着 while 的作用域规则不同;这仅意味着不可能使用 while 编写此代码。 没有任何“在 while 语句的条件下声明的变量”。

关于c++ - 循环中变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41523989/

相关文章:

javascript - 为什么 'error' 变量重新分配在功能范围内不是 catch{} block ?

swift - 这是什么意思 ?声明仅在文件范围内有效

c++ - directX 中的网格动画

c++ - QDir entryList可以透明地使用文件夹快捷方式吗

c++ - 在 for 的括号中定义变量

c++ - 传递用于结构定义的参数

java - Bean 范围 ("Request")不起作用

C++ - 指向类类型的指针

c++ - 为什么在我键入名称时我的可执行文件不会运行? (Mac OS X 山狮) Mac OS X 10.8.2

c++ - 是否有可能阻止 RAII 样式类被实例化 "anonymously"?