请考虑以下代码:
int s= int(sr/nt);
int temp1 = 0; //initialization for the first time case
// the following is the logic for the subsequent cases
int temp2= temp1; // a non-zero value of 's', calculated previously and stored in temp1 is now transferred to temp2
temp1 = s; // currently calculated value of 's' stored in temp1
double moving_average = (temp1+temp2)/2; // not relevant to the problem
我的问题是我需要上面的代码在调用它时运行多次;并且需要存储在temp1中的先前's'值将其传递给temp2以计算移动平均值。
当我在代码中将temp1初始化为零时,它将在后续迭代中执行,我将无法得到我需要的东西。
有什么想法吗?提前致谢
答案 0 :(得分:3)
你应该static
static int temp1 = 0;
这将确保它只被初始化一次,之后将不会重新初始化。
答案 1 :(得分:1)
可能的解决方案:
将temp1
及其初始化移出代码并将temp1
传递给函数(我假设上面的代码在函数中)。调用代码将管理temp1
并确保它是传递给函数的相同变量:
void moving_average_func(int& a_temp1)
{
}
int temp1 = 0;
moving_average_func(temp1);
moving_average_func(temp1);
使temp1
成为static
变量,因此初始化仅发生一次:
static int temp1 = 0;
使用非static
解决方案重新开始计算更简单,并且如果多个线程使用相同的代码块,则避免同步要求(因为多个线程将访问相同的temp1
static
解决方案)。
答案 2 :(得分:0)
您可以使temp1
成为静态变量,以便在函数调用之间保留其值。这样,它只会在第一次调用函数时初始化为零 - 注意它会自动初始化为零(根据standard),因此您不必自己明确地执行此操作。它的工作原理示例:
#include <iostream>
using namespace std;
void asd()
{
static int a=1;
cout << a << endl;
a++;
}
int main()
{
asd(); //outputs 1
asd(); //outputs 2
return 0;
}