C ++ If语句变量范围

时间:2019-11-12 03:59:53

标签: c++ if-statement scope

我有此函数,由于变量numer的范围,运行该函数时会给出错误的答案。有没有一种方法可以对此函数仅使用一个return语句。我不得不单独使用return语句,这给了我正确的答案(您可以在//中看到)。

double calc_real_root(double a, double b, double c, double disc, double operation)
{ 
  double denom=2*a;
  double numer;
  if (operation == ADD)
  {
    double numer = -b + sqrt(disc);
    //return numer / denom ;
  }

  else 
  {
    double numer = -b - sqrt(disc);
    //return numer / denom ;
  }
  return numer / denom ;
}

2 个答案:

答案 0 :(得分:2)

您已声明名为numer三个变量:

  1. 第一个未初始化,并在return语句中使用
  2. if正文中的那个
  3. else正文中的那个

解决方案是从doubleif主体中删除else。例如,

numer = -b + sqrt(disc);

答案 1 :(得分:1)

问题在于您正在 shadwing 外部 变量numer中使用同名的 inner 变量。

请参阅:Shadowing variables

您可以从内部范围分配变量numer,而不用声明新变量。

double calc_real_root(double a, double b, double c, double disc, double operation)
{ 
  double denom=2*a;
  double numer;
  if (operation == ADD)
  {
    // Assign to `numer` without declaring new variable.
    numer = -b + sqrt(disc);
  }
  else 
  {
    numer = -b - sqrt(disc);
  }
  return numer / denom ;
}
相关问题