将更改此静态变量内部的函数的结果分配给静态变量
assignation to the static variable the result of function which changes this static variable inside
我想知道,下面代码中的标记行是否正确。因为在这一行中,函数的结果被分配给静态变量prevRecCallResult
(我称之为"普通赋值"),它在这个函数内部发生了变化(我称之为"内部赋值")。当"普通分配"执行时,是否保证"内部分配"已完成?
int f(int _n)
{
if (_n >= 1)
{
static int prevRecCallResult;
prevRecCallResult = f(_n - 1); //<-- Is this line Ok?
return prevRecCallResult + 1;
}
else
return _n;
}
我知道,标准说,会出现一个序列点:
,在函数返回时,将返回值复制到 调用上下文。
但我不确定,这是我问题的答案。
更新:
考虑到我收到的回复,我应该澄清我的问题:
它的本质是:在f(_n - 1)
完成之前,赋值表达式(在标记行中)(即不被它占用)prevRecCallResult
是否属实?(因此,直到这一刻,prevRecCallResult
完全免费进行f(_n - 1)
内部的任何作业?
static int prevRecCallResult;
prevRecCallResult = f(_n - 1); //<-- Is this line Ok?
你的代码完全没问题。但只是想让你记住static int prevRecCallResult;
只执行一次。但是prevRecCallResult = f(_n - 1);
是在每次函数调用后分配的。一旦函数返回prevRecCallResult
的函数,函数的返回值将用于函数的其余部分。
还有一件事,静态变量不会死,在你从函数返回后。因此,prevRecCallResult
不会在函数调用中死亡。
我
记得所有静态变量以及 C 和 C++ 中的所有全局变量都自动分配给其类型的默认值 - 在这个特定示例中,"static int prevRecCallResult"的默认值将为 0。所以你的担心是没有根据的(你可以用调试器轻松检查这一点)。同时我不明白为什么你在这个代码中使用静态变量......它只是问题的简化代码,还是您试图节省递归函数自动变量内存的真实代码?
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量