首页 > 解决方案 > 静态变量和 For 循环

问题描述

我已经为我的问题制作了一个最小的可重现示例:

#include <iostream>

void Func()
{
    static int i = 0;

    for (i; i < 5; i++)
    {
        std::cout << i << "\n";
        return;
    }
}

int main()
{
    Func();
    Func();
    Func();
}

其输出为“0”、“0”、“0”。我希望它输出“0”、“1”、“2”。我如何实现这一目标?

标签: c++static

解决方案


问题是Func() returns 紧随其后i被打印出来,i++(作为循环的迭代表达式for)根本没有被评估。

您可能想要(即使循环在这里似乎毫无意义,函数return在第一次迭代时总是 s):

void Func()
{
    static int i = 0;

    for (;i < 5;)
    {
        std::cout << i << "\n";
        i++;
        return;
    }
}

或者

void Func()
{
    static int i = 0;

    for (;i < 5;)
    {
        std::cout << i++ << "\n";
        return;
    }
}

PS:我不确定你的意图,但正如@FrançoisAndrieux 和@Jarod42 评论的那样,使用iforwhile似乎更有意义,如果你想i每次都增加Func()但不会大于5.


推荐阅读