C++If语句变量作用域

C++ If-statement variable scope

本文关键字:作用域 变量 语句 C++If      更新时间:2023-10-16

我有这个函数,当我运行它时,由于变量numer的作用域,它给了我错误的答案。有没有一种方法可以为这个函数只使用一个返回语句。我不得不分开返回语句,这给了我正确的答案(您可以用//看到(。

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

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

  1. 初始值未初始化,在return语句中使用
  2. if机身中的
  3. else机身中的

解决方案是从ifelse体中去除double。例如,

numer = -b + sqrt(disc);

问题是用同名的内部变量遮蔽外部的变量numer

参见:阴影变量

您可以从内部作用域为变量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 ;
}