在初始案例之后将值传递给变量

时间:2013-04-26 11:46:30

标签: c++

请考虑以下代码:

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初始化为零时,它将在后续迭代中执行,我将无法得到我需要的东西。

有什么想法吗?提前致谢

3 个答案:

答案 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;
}