C++ 每次运行函数时更新变量

C++ 每次运行函数时更新变量,c++,C++,正如标题所说,我想更新函数的特定变量,并将其用作同一函数的输入。 试图更好地解释: double pi_control(double x, double integral_x, double dt) { integral_x = (x * dt) + integral_x; return integral_x; } x和dt是给定的变量(x=3.0,dt=0.01)。运行pi_控制后的积分_x(其初始值为0.0)为0.03。 我想再运行一次pi_控件,如何重写integral_

正如标题所说,我想更新函数的特定变量,并将其用作同一函数的输入。 试图更好地解释:

double pi_control(double x, double integral_x, double dt) {
    integral_x = (x * dt) + integral_x;
    return integral_x;
}
x和dt是给定的变量(x=3.0,dt=0.01)。运行pi_控制后的积分_x(其初始值为0.0)为0.03。 我想再运行一次pi_控件,如何重写integral_x初始值并使用0.03

编辑:

全pi_控制功能

double pi_control(double x, double &integral_x, double kp, double ki, double dt) {
    integral_x = (x * dt) + integral_x;
    double u = - kp * x - ki * integral_x;
    return u;

}

通过引用将签名更改为采用
integral_x

double pi_control(double x, double &integral_x, double dt) { ... }

现在,对函数中的
integral\ux
变量所做的任何更改都会反映在传入的变量中。

为什么不直接返回
integral\ux
的新值呢(请注意,如图所示,函数声明为返回一个
double
但没有
return
语句——这是未定义的行为)

我宁愿简单

integral_x = pi_control(x, integral_x, dt);

传递值和传递引用参数之间没有混淆,调用者还可以决定是否要更新
integral\ux

我想性能应该是一样的,特别是当函数可以内联时(编译器可以在翻译过程中看到它的定义)

更新

您对问题做了很大的更改,但无论如何,此解决方案仍然是可行的:

std::pair<double, double> pi_control(double x, double integral_x, double kp, double ki, double dt)
{
  integral_x = (x * dt) + integral_x;
  double u = - kp * x - ki * integral_x;
  return {u, integral_x};
}

显然,该函数仅作为示例以这种方式报告。不管怎样,谢谢你说的覆盖值是什么意思?它已经是您传入的参数。您可以只传入更新的值吗?你可能需要澄清你的问题。可能我没有解释清楚。我有“integral_x”作为输入(初始值为0.0)。积分_x,如前所述给定x和dt,运行一次后函数变为0.03。我想使用新的积分作为输入(而不是0.0初始值)。将
integral\ux=pi\u控制(x,integral\ux,dt)呼叫为您工作?若否,原因为何?我认为它比通过引用传递积分要可读得多。实际上,我的函数有点复杂。积分_x是我必须在pi_控制中使用的一个参数,以提供另一个变量作为输出。每次我运行pi_控件integral_x(pi_控件的输入)时都应该更新。我编辑了第一篇文章。我更喜欢这个解决方案,因为调用方可以决定是否更新其变量。此外,混合传递值和传递引用有点难看,可能会妨碍阅读/理解代码。谢谢。通过引用传递是否可以得到相同的结果?
double pi_control(double x, double integral_x, double dt)
{
  return x * dt + integral_x;
}
std::pair<double, double> pi_control(double x, double integral_x, double kp, double ki, double dt)
{
  integral_x = (x * dt) + integral_x;
  double u = - kp * x - ki * integral_x;
  return {u, integral_x};
}
std::tie(u, integral_x) = pi_control(x, integral_x, kp, ki, dt);