C++ C++;变量在传递给函数时丢失值

C++ C++;变量在传递给函数时丢失值,c++,c++11,lambda,C++,C++11,Lambda,我正在创建一个计算数学表达式的程序,ax^2+b*x+c,a,b,c被传递到quadraticExp(),x从quadraticExp(a,b,c)(x) 因此变量b,c正在丢失它们的值。为什么会发生这种情况?我怎样才能摆脱它 我是否可以编写lambda对象的完整定义//返回auto f1[&](double x)->double,以便在函数中重用f1 所以变量b,c失去了它们的值。为什么会发生这种情况?我怎样才能摆脱它 试一试 // .....v return [=] (double x)

我正在创建一个计算数学表达式的程序,
ax^2+b*x+c
a,b,c
被传递到
quadraticExp()
x
quadraticExp(a,b,c)(x)

  • 因此变量
    b,c
    正在丢失它们的值。为什么会发生这种情况?我怎样才能摆脱它
  • 我是否可以编写lambda对象的完整定义
    //返回auto f1[&](double x)->double
    ,以便在函数中重用
    f1
所以变量b,c失去了它们的值。为什么会发生这种情况?我怎样才能摆脱它

试一试

// .....v
return [=] (double x)
{
    std::cout<<a<<" "<<b<<" "<<c<<" "<<x<<std::endl;
    return ( a*std::pow(x,2) + b*x + c );
};

a
b
c
的范围是什么?你不认为获取他们的引用是有风险的吗?你想在哪里重复使用它?您已经可以在main中执行
auto f1=quadraticExp(a,b,c)
,然后像
f1(x)一样使用它返回lambda,该lambda通过引用和绑定参数a、b、c。这些是quadraticExp函数的本地函数,当函数返回时,它们超出了范围。所以你得到了lambda,它引用了丢失的参数。通过[=]按值绑定应该有效。@ee557725-不确定是否理解第二点,但。。。回答,这就是我的意思。
1 8.00798e-307 1.83847e-307 3
9
// .....v
return [=] (double x)
{
    std::cout<<a<<" "<<b<<" "<<c<<" "<<x<<std::endl;
    return ( a*std::pow(x,2) + b*x + c );
};
auto quadraticExp (double a, double b, double c)
   -> std::function<double(double)>
 {
   auto f1 = [=](double x)
    {
      std::cout<<a<<" "<<b<<" "<<c<<" "<<x<<std::endl;
      return ( a*std::pow(x,2) + b*x + c );
    };

   f1(42); // use of f1 inside the function

   return f1;
}