如何在C++函数中声明无需重复初始化的局部变量?
函数内持久化局部变量的正确实现
你当前的代码确实会每次调用fun时都把storedVal重置为0.0f——因为它是普通局部变量,每次函数调用都会重新分配内存并执行初始化。要实现“作用域局限于函数内,但保留上一次调用的值”,只需要用static关键字修饰该变量即可。
修改后的代码:
void fun(float a[], float c){ static float storedVal = 0.0f; // 仅第一次调用时初始化,后续调用保留之前的值 if (on) { storedVal = c; on = false; } else if (c - storedVal > 0.5f) { a[0] = storedVal; } }
关键说明:
static修饰的局部变量,生命周期贯穿整个程序运行期,只会在第一次进入函数时执行初始化操作,后续调用函数时不会再重置它的值。- 该变量的作用域仍然局限在
fun函数内部,外部代码无法直接访问,完全符合你的需求。 - 额外提示:浮点数直接做差值比较可能存在精度误差,如果业务场景对精度敏感,可以考虑引入一个极小的阈值(比如
1e-6)来判断差值是否大于0.5,例如:if (c - storedVal > 0.5f + 1e-6f)。
内容的提问来源于stack exchange,提问作者frankie
相关产品推荐
相关产品推荐

