可能重复:
C++ 编译器通过您编写的警告让您知道,
if( a = b ) { //...
你肯定想写这可能是一个错误:
if( a == b ) { //...
但是是否存在应该忽略警告的情况,因为这是使用此“功能”的好方法?我看不出有任何代码清晰的原因,那么它是否有用?
原文由 Klaim 发布,翻译遵循 CC BY-SA 4.0 许可协议
可能重复:
C++ 编译器通过您编写的警告让您知道,
if( a = b ) { //...
你肯定想写这可能是一个错误:
if( a == b ) { //...
但是是否存在应该忽略警告的情况,因为这是使用此“功能”的好方法?我看不出有任何代码清晰的原因,那么它是否有用?
原文由 Klaim 发布,翻译遵循 CC BY-SA 4.0 许可协议
while ( (line = readNextLine()) != EOF) {
processLine();
}
原文由 Steven Schlansker 发布,翻译遵循 CC BY-SA 2.5 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答469 阅读✓ 已解决
两个可能的原因:
=
运算符(未覆盖时)通常返回它分配的值。这是为了允许诸如a=b=c=3
类的语句。在您的问题的上下文中,它还允许您执行以下操作:此外,应注意(如 Billy ONeal 在下面的评论中所述),当
=
运算符的左侧参数实际上是具有为类型指定的 转换运算符 的类时,这也可以工作可以强制(隐式转换)为布尔值。换句话说,(a=b)
将评估为true
或false
如果 a 是可以强制为布尔值的类型。因此,以下情况与上述情况类似,除了
=
的左侧参数是对象而不是布尔值:注意: 在撰写本文时,上面的代码格式存在错误。我的代码(检查源代码)实际上具有正确的缩进、移位运算符和行距。
<
应该是 <‘s,并且每行之间不应该有巨大的差距。=
运算符由于 C++ 允许覆盖运算符,有时 = 将被覆盖以执行与原始类型不同的操作。在这些情况下,对对象执行
=
操作可能会返回一个布尔值(如果这就是该对象类型的=
运算符被覆盖的方式)。因此,以下代码将使用
b
作为参数对a
执行=
操作。然后它会根据该操作的返回值有条件地执行一些代码:在这里,
a
必须是一个对象,而b
将是正确的类型,由a
=
对象的覆盖运算符定义---
的类型。要了解有关运算符覆盖的更多信息,请参阅包含 C++ 示例 的维基百科文章:关于运算符覆盖的维基百科文章