我有两个变量,我想分别处理较大和较小的变量。
我的方法:
a = 1;
b = 2;
if (a >= b){
int c = a;
int d = b;
}
else{
int c = b;
int d = a;
}
我得到了一个未使用的变量的错误,后来当我尝试使用c
和d
时,它说
c
无法解决
有没有办法解决这个问题?
答案 0 :(得分:29)
在两种情况下,c
和d
被限制在if
else
块中的括号中,因此您无法访问它们之外。
您需要某种形式的东西
int c, d;
if (a >= b){
c = a;
d = b;
} else {
c = b;
d = a;
}
答案 1 :(得分:21)
正如其他人指出的那样,这里的问题是在哪里声明变量。您不能在声明它们的范围之外使用它们,否则会出现错误。
如果可以使用C ++ 17,则可以使用std::minmax
和类似structured binding的代码来修复代码
int main()
{
int a = 5, b = 10;
auto [min, max] = std::minmax(b, a);
std::cout << min << " " << max;
}
这非常好,因为现在您没有任何时间未初始化的变量。
答案 2 :(得分:6)
这是因为您要在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;
使用这种类型的语法,您可以省去编写if
和else
块来进行简单变量分配的麻烦。如果条件为真,则?
之后的变量 为变量,如果条件为假,则:
之后的变量为结果。
答案 3 :(得分:4)
这是一个范围问题,您正在范围内创建变量,并且无法在外部访问它们
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));