在C ++中使用if语句时的变量分配

时间:2019-05-13 15:10:15

标签: c++

我正在尝试使用C ++中的if语句,如果条件成立,我会以一种方式分配变量,否则以另一种方式分配变量。我的代码是:

  double mu;
  double lambda;

  if (u2(RNG) < condition) {
     double mu{(y-min)/(x-min)};
     double lambda{pow(y-min, 2.0)/(t-s)};
  } else {
     double mu{(x-min)/(y-min)};
     double lambda{pow(x-min, 2.0)/(t-s)};
   }

但是,之后mu和lambda不会被更改-我认为这是因为设置变量mu和lambda的语句在块中,因此当它离开该块时,它们将被更改。有谁知道我该怎么做,以便在这段代码之后,更改mu和lambda。

更清楚地说,例如,如果mu和lambda初始化为0,则在if-else语句之后,它们将保持不变,尽管我希望根据我所处的条件对其进行更改。

谢谢

3 个答案:

答案 0 :(得分:4)

我不小心重新声明了变量-我的坏。这是正确的:

  double mu;
  double lambda;

  if (u2(RNG) < condition) {
     mu = (y-min)/(x-min);
     lambda = pow(y-min, 2.0)/(t-s);
  } else {
     mu =(x-min)/(y-min);
     lambda = pow(x-min, 2.0)/(t-s);
  }

答案 1 :(得分:3)

您正在隐藏分支内部的外部变量。从分配中删除类型(double,将其分配给外部变量,而不是声明具有相同名称但作用域更有限的新变量。

您想要这个:

if (u2(RNG) < condition) {
    mu = (y-min)/(x-min);
    lambda = pow(y-min, 2.0)/(t-s);
 } else {
...

答案 2 :(得分:1)

您要重新定义阴影,并因此在每个分支中的阴影 mulambda

编译器没有警告您吗?