gpt4 book ai didi

c++ - 对静态变量的赋值是函数的结果,该函数在内部更改了该静态变量

转载 作者:行者123 更新时间:2023-11-28 06:28:59 24 4
gpt4 key购买 nike

我想知道下面代码中标记的行是否正确。因为在这一行中,函数的结果被分配给静态变量 prevRecCallResult(我将其称为“plain assignment),它在此函数内部更改(我将其称为“内部赋值)。是否保证在执行“普通赋值”时完成“内部赋值”?

int f(int _n)
{
if (_n >= 1)
{
static int prevRecCallResult;
prevRecCallResult = f(_n - 1); //<-- Is this line Ok?
return prevRecCallResult + 1;
}
else
return _n;
}

我知道,标准说,出现了一个序列点:

At a function return, after the return value is copied into the calling context.

,但我不确定,这就是我的问题的答案。

更新:

考虑到我收到的回复,我应该澄清我的问题:

它的本质是:prevRecCallResult 没有被赋值表达式(在标记行中)使用(即没有被它占用)是真的吗? em>until f(_n - 1) 完成了吗? (因此,直到这一刻,prevRecCallResult 对于 f(_n - 1) 中的任何赋值都是绝对免费的?)

最佳答案

static int prevRecCallResult;
prevRecCallResult = f(_n - 1); //<-- Is this line Ok?

您的代码完全没问题。但只是想让您记住 static int prevRecCallResult; 只执行一次。但是 prevRecCallResult = f(_n - 1); 是在每次函数调用之后分配的。一旦函数返回 prevRecCallResult 的 at 时间函数的返回值将用于函数的其余部分。

还有一件事,静态变量不会在你从函数返回后消亡。所以 prevRecCallResult 不会死于函数调用。

关于c++ - 对静态变量的赋值是函数的结果,该函数在内部更改了该静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27985650/

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