c++ - For循环在自己的花括号内

标签 c++ for-loop scope

我遇到了这种for循环布局:

#include <iostream>
int main()
{
    {
        for (int i = 0; i != 10; ++i)
        {
            std::cout << "delete i->second;" << std::endl;
        }
    }

    {
        for (size_t i = 0; i < 20; ++i)
        {
            std::cout << "delete m_indices[i];" << std::endl;
        }
    }
    return 0;
}

我想知道这括号的额外用途是什么?这在我们的代码库中出现了几次。

最佳答案

曾几何时,许多月前,VS6存在并广受欢迎。但是,它未能符合许多C++标准。在标准正式发布之前(同年)发布时,这是合理的;据我所知,它确实遵守了标准草案。

在草案和正式标准之间更改的标准之一是在第一部分中创建的for循环变量的生存期。导致以下代码无法编译

{
    for (int i=0; i<1; ++i){}
    for (int i=0; i<2; ++i){}
}

因为i由第二个for循环重新定义。

其他编译器也遇到了此错误;我重点介绍VS6,因为它是标准发布后许多年以来Visual Studio的唯一版本,但从未针对此特定问题发布更新。意味着它产生了更大的影响。

一种解决方案是将整个for循环强制进入其自己的作用域,如您所示。

关于c++ - For循环在自己的花括号内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60719037/

相关文章:

python - Python 中循环的奇怪行为

c++ - 如何使用 header 对象在 malloc 内存中安全地构造 C++ 对象

java - 循环后标记的break在Java中不起作用

c - 有没有办法使 C 中的变量只能由声明它的文件访问?

python - 为什么python FOR循环没有控制结构?

linux - 带输入文件和 ftp 的 For 循环

c++ - 创建未知数量的对象,每个对象在运行时都有特定的对象名称 C++

c++ - 我在代码中的几行中得到了这个 "warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)"

c++ - "CoInitialize failed"当一个函数(来自库)包含在 VC++ MFC 项目中时

c++ - std::remove_reference 有什么意义