C++ 为什么可以';我把一个变量的值分配给另一个变量吗?

C++ 为什么可以';我把一个变量的值分配给另一个变量吗?,c++,C++,我有两个变量,我想用不同的方法处理较大的变量和较小的变量 我的做法: a = 1; b = 2; if (a >= b){ int c = a; int d = b; } else{ int c = b; int d = a; } 我得到了一个未使用变量的错误,当我稍后尝试使用c和d时,它说 无法解析c 有办法解决这个问题吗?这是因为您在if语句中声明变量 从逻辑上讲,您可能认为else在某种程度上保证了如果声明同时在if和else块中,那么变量将被赋值

我有两个变量,我想用不同的方法处理较大的变量和较小的变量

我的做法:

a = 1;
b = 2;

if (a >= b){
    int c = a;
    int d = b;
}
else{
    int c = b;
    int d = a;
}
我得到了一个未使用变量的错误,当我稍后尝试使用
c
d
时,它说

无法解析
c


有办法解决这个问题吗?

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

从逻辑上讲,您可能认为
else
在某种程度上保证了如果声明同时在
if
else
块中,那么变量将被赋值

正确的方法是只在
if
块之前声明变量,否则使用的变量将限制在声明它的范围内

此外,通过使用三元运算,您可以在不需要
if
else
的情况下执行此操作:

        int a = 1;
        int b = 2;

        int c = a >= b ? a : b;
        int d = b < a ? b : a;
inta=1;
int b=2;
INTC=a>=b?a:b;
int d=b

使用这种语法,您可以省去为简单变量赋值编写
if
else
块的麻烦。
之后的变量是条件为真时的结果,
之后的变量是条件为假时的结果。

在这两种情况下,
c
d
都被限定在
if
else
块中的大括号内,因此您无法在该块之外访问它们

你需要这种形式的东西

int c, d;
if (a >= b){
    c = a;
    d = b;
} else {
    c = b;
    d = a;
}

这是一个范围问题,您正在范围内创建变量,而在范围外无法访问它们

if (a >= b){
    int c = a;  // c and d belongs to that if scope
    int d = b;
}
else{
    int c = b;  // c and d belongs to that else scope
    int d = a;
}
将代码更改为:

a = 1;
b = 2;
int c;
int d;

if (a >= b){
    c = a;
    d = b;
}
else{
    c = b;
    d = a;
}
// You can now call c and d there

缩短该代码的一种方法是存储
A>=b的布尔值,并在三元表达式中使用它来设置
c
d

例如:

a = 1;
b = 2;
bool IsAGreaterOrEqualToB = (a >= b);
int c = ((IsAGreaterOrEqualToB) ? (a) : (b));
int d = ((IsAGreaterOrEqualToB) ? (b) : (a));

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

如果您可以使用C++17,那么您可以使用和类似的方法修复代码

intmain()
{
INTA=5,b=10;
自动[最小值,最大值]=标准::最小值(b,a);

std::cout问题不是在
if
语句中设置变量,问题是在那里声明它们。我没有投反对票,但这肯定是因为缺乏解释它与变量“设置”的位置无关。这是它们被声明的地方。这个答案确实需要一些充实。@Angew明白了。当然这就是我的意思。我会编辑。三元方法的问题是你基本上重复了条件检查。你在那里有很多括号。为什么呢?我还要加上一些
常量
,但如果不是这样,这是肯定的很好。宁愿使用init而不是赋值!@LightnessRacesinOrbit这是我的老习惯。比如当我返回某个东西时,我习惯于写:
返回(MyVar);
好吧,但为什么呢?它只会增加噪音!
?(a):(b)
更难阅读(CID:顺便说一下,C++中偶尔也会有害。@ LexNeasraceSin轨道,这只是一种习惯,它帮助我区分不同的部分(尤其是当我写了一些嵌套三进制)时。如果您认为这可能更具可读性,请随意编辑我的答案。答案是为其他人准备的。这真的很好。@Bathsheba是的。我喜欢它,因为它非常清楚地表达了您要做的事情。从可维护性的角度看,这是黄金。这提供了一些很好的指导,说明您通常在哪里声明内容会影响到何处/如何声明内容然后,您可以在以后的程序中使用它
int main()
{
    int a = 5, b = 10;
    auto [min, max] = std::minmax(b, a);
    std::cout << min << " " << max;
}