我有两个变量,我想分别处理较大和较小的变量。
我的方法:
a = 1;
b = 2;
if (a >= b){
int c = a;
int d = b;
}
else{
int c = b;
int d = a;
}
我遇到了一个未使用变量的错误,当我稍后尝试使用 c
和 d
时,它会显示
c
无法解析
有没有解决方法?
我有两个变量,我想分别处理较大和较小的变量。
我的方法:
a = 1;
b = 2;
if (a >= b){
int c = a;
int d = b;
}
else{
int c = b;
int d = a;
}
我遇到了一个未使用变量的错误,当我稍后尝试使用 c
和 d
时,它会显示
c
无法解析
有没有解决方法?
c
和d
都被限定在if
else
块中的大括号范围内,因此你不能在外部访问它们。int c, d;
if (a >= b){
c = a;
d = b;
} else {
c = b;
d = a;
}
正如其他人指出的那样,这里的问题在于你声明变量的位置。你不能在声明的范围之外使用它们,因此会导致错误。
如果你可以使用C++17,你可以通过使用std::minmax
和结构化绑定来修复代码,例如:
int main()
{
int a = 5, b = 10;
auto [min, max] = std::minmax(b, a);
std::cout << min << " " << max;
}
这真的很好,因为现在您不会有任何时间未初始化的变量。
int a = 1;
int b = 2;
int c = a >= b ? a : b;
int d = b < a ? b : a;
if
语句中设置变量,而在于在其中声明它们。 - Angew is no longer proud of SO这是一个作用域问题,你在作用域内创建了变量,所以它们无法在外部访问。
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));
const
,但除此之外,这很好。更喜欢初始化而不是赋值! - Lightness Races in Orbit? (a) : (b)
比 ? a : b
更难读 :( - Lightness Races in Orbit