gpt4 book ai didi

c++ - 为什么递归中的 std::ofstream 没有按预期工作?

转载 作者:太空狗 更新时间:2023-10-29 21:44:00 24 4
gpt4 key购买 nike

给定代码如下:

int recur(int num);
int main()
{
recur(5);
return 0;
}

int recur(int num)
{
static unsigned count = 0;
//static
std::ofstream log("log.txt",std::ios_base::app|std::ios_base::out);
std::cout << count << "\n";
log << count << "\n";
++count;

if (num==0) return 0;
num += recur(num -1);

return num;
}

std::cout 的输出:

0
1
2
3
4
5

log.txt 的内容:

5
4
3
2
1
0

为什么会这样?

我试图将 static 放在 std::ofstream 之前,正如在函数 recur 中所注释的那样。然后它运行良好,与 std::cout 的输出完全相同。任何人都可以解释幕后的基本原理吗?

最佳答案

您在 log 的析构函数中关闭之前调用了 recur。这意味着该文件将由多个 ofstream 一次打开,并且递归中较早的 ofstream 不会像 celtschk 指出的那样被刷新。如果您在调用 recur 之前关闭文件,它应该可以工作。如果您将 log 声明为 static 它会起作用,因为这样日志只会被构造一次,因此打开一次。下面的代码添加了一个 block 以确保 log 的解构函数在 recur 之前被调用。

int recur(int num)
{
static unsigned count = 0;

{
std::ofstream log("log.txt",std::ios_base::app|std::ios_base::out);
std::cout << count << "\n";
log << count << "\n";
++count;
}

if (num==0) return 0;
num += recur(num -1);

return num;
}

关于c++ - 为什么递归中的 std::ofstream 没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21371228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com