为什么不能将一个变量的值分配给另一个变量?

Lau*_*cha 14 c++

我有两个变量,我想分别处理较大和较小的一个。

我的方法:

a = 1;
b = 2;

if (a >= b){
    int c = a;
    int d = b;
}
else{
    int c = b;
    int d = a;
}
Run Code Online (Sandbox Code Playgroud)

我获得的未使用的变量的错误,当我尝试使用cd以后,它说

c 无法解决

有办法解决吗?

Bat*_*eba 29

在这两种情况下cd它们的作用域限于if else块中的括号,因此您不能在该范围之外访问它们。

您需要某种形式的东西

int c, d;
if (a >= b){
    c = a;
    d = b;
} else {
    c = b;
    d = a;
}
Run Code Online (Sandbox Code Playgroud)


Nat*_*ica 21

正如其他人指出的那样,这里的问题是在哪里声明变量。您不能在声明它们的范围之外使用它们,否则会出现错误。

如果可以使用C ++ 17,则可以使用std::minmax结构化绑定(

int main()
{
    int a = 5, b = 10;
    auto [min, max] = std::minmax(b, a);
    std::cout << min << " " << max;
}
Run Code Online (Sandbox Code Playgroud)

真是太好了,因为现在您没有任何时间未初始化的变量。

  • 真的很好。 (2认同)
  • @Bathsheba是的。我喜欢它,因为它非常清楚地表达了您想要做的事情。从可维护性的角度来看,这就是黄金。 (2认同)

Elr*_*son 6

这是因为您要在if语句中声明变量。

从逻辑上讲,您可能会相信,else如果声明同时在ifelse块中,则以某种方式可以保证将分配变量。

正确的方法是在if块之前声明变量,否则变量的使用将限于声明该变量的范围。

另外,您可以通过使用三元运算而无需使用if和来执行此else操作:

        int a = 1;
        int b = 2;

        int c = a >= b ? a : b;
        int d = b < a ? b : a;
Run Code Online (Sandbox Code Playgroud)

使用这种类型的语法,您可以省去编写简单代码ifelse分配变量的麻烦。变量之后?是结果,如果条件为真,并经过变量:是结果,如果条件为假。

  • “设置”变量与它无关。在这里声明它们。这个答案确实需要充实。 (2认同)