在 C++ 中 a+=b == c 做什么?
What a+=b == c does in C++?
这段代码困扰了我一整天,我想我需要一些帮助,这是用 C++ 编写的代码:
int main()
{
int a = 3, b = 4;
if (a+=2 == b) {
cout << a << endl;
cout << "True" << endl;
}
return 0;
}
无论a
和b
的值是什么,if
语句总是为真,并且a的值不会改变(即cout
for a
将在第一次分配时打印 a 的值。但是,当我将一对括号放在 (a+=2)
时,代码将按预期执行。所以我的问题是为什么if
语句中的表达式总是 true
?
运算符 ==
的 precedence 高于 +=
。此语句等于 a += (2 == b)
。语句returnsnew value of a
,当new value不为零时为真
a
的值在这里没有改变,因为2 == b
是false,转换为整数时为零。
运算符优先级意味着 a+=2 == b
将被分组为 a += (2 == b)
。所以 a
随着 b
和 2
之间比较的结果递增。
比较结果是一个布尔值,所以当转换为整数时会得到 0
或 1
.
由于复合加法 (+=
) 的计算结果也是运算结果,因此 if
语句中的条件将检查 a
的值是否为 0
添加 0
或 1
后。由于 a
被初始化为 3
,无论哪种方式,条件都为真。
https://en.cppreference.com/w/cpp/language/operator_precedence
你的答案在所谓的运算符优先级和布尔值的定义中。
C++ 以特定方式评估您的 if 条件语句。首先,它会评估您的“==”运算符。在大多数情况下,2 不等于 'b',== 运算符将为 return false。您现在拥有:
int main()
{
int a = 3, b = 4;
if (a += false) {
cout << a << endl;
cout << "True" << endl;
}
return 0;
}
在您认为布尔值 false 也是值 0 之前,这没有什么意义。您现在有:
int main()
{
int a = 3, b = 4;
if (a += 0) {
cout << a << endl;
cout << "True" << endl;
}
return 0;
}
'a' += 0 永远保持a的值。因此,当输出时,你得到不变的 'a' 和 'b' 值。
如果您再次 运行 将 b 初始化为 2 的代码,如下所示:
int main()
{
int a = 3, b = 2;
if (a += 2 == b) { // 2 == b becomes true (which is 1); a += 1 is then executed;
cout << a << endl;
cout << "True" << endl;
}
return 0;
}
'a' 的输出为 3。这是因为 true 也是 1,然后 1 被添加到 'a'.
if 语句似乎总是 运行 的原因是因为任何非零数字在 if 语句中的计算结果为真。
这段代码困扰了我一整天,我想我需要一些帮助,这是用 C++ 编写的代码:
int main()
{
int a = 3, b = 4;
if (a+=2 == b) {
cout << a << endl;
cout << "True" << endl;
}
return 0;
}
无论a
和b
的值是什么,if
语句总是为真,并且a的值不会改变(即cout
for a
将在第一次分配时打印 a 的值。但是,当我将一对括号放在 (a+=2)
时,代码将按预期执行。所以我的问题是为什么if
语句中的表达式总是 true
?
运算符 ==
的 precedence 高于 +=
。此语句等于 a += (2 == b)
。语句returnsnew value of a
,当new value不为零时为真
a
的值在这里没有改变,因为2 == b
是false,转换为整数时为零。
运算符优先级意味着 a+=2 == b
将被分组为 a += (2 == b)
。所以 a
随着 b
和 2
之间比较的结果递增。
比较结果是一个布尔值,所以当转换为整数时会得到 0
或 1
.
由于复合加法 (+=
) 的计算结果也是运算结果,因此 if
语句中的条件将检查 a
的值是否为 0
添加 0
或 1
后。由于 a
被初始化为 3
,无论哪种方式,条件都为真。
https://en.cppreference.com/w/cpp/language/operator_precedence
你的答案在所谓的运算符优先级和布尔值的定义中。
C++ 以特定方式评估您的 if 条件语句。首先,它会评估您的“==”运算符。在大多数情况下,2 不等于 'b',== 运算符将为 return false。您现在拥有:
int main()
{
int a = 3, b = 4;
if (a += false) {
cout << a << endl;
cout << "True" << endl;
}
return 0;
}
在您认为布尔值 false 也是值 0 之前,这没有什么意义。您现在有:
int main()
{
int a = 3, b = 4;
if (a += 0) {
cout << a << endl;
cout << "True" << endl;
}
return 0;
}
'a' += 0 永远保持a的值。因此,当输出时,你得到不变的 'a' 和 'b' 值。
如果您再次 运行 将 b 初始化为 2 的代码,如下所示:
int main()
{
int a = 3, b = 2;
if (a += 2 == b) { // 2 == b becomes true (which is 1); a += 1 is then executed;
cout << a << endl;
cout << "True" << endl;
}
return 0;
}
'a' 的输出为 3。这是因为 true 也是 1,然后 1 被添加到 'a'.
if 语句似乎总是 运行 的原因是因为任何非零数字在 if 语句中的计算结果为真。