C++ 在c++;如果(a=b)是什么意思?与if(a==b)的比较

C++ 在c++;如果(a=b)是什么意思?与if(a==b)的比较,c++,C++,可能已得到答复,但找不到 C++中的什么? if(a=b) 什么意思? 对 我只是花了两个小时调试来找到它 if(a=b) 编译为 a=b 为什么编译器不标记 if(a=b) if(a=b) 作为一个错误 在C++中,如果(a= b)是什么意思?< /P> a=b是赋值表达式。如果a的类型是基元的,或者如果赋值运算符是由编译器生成的,则此类赋值的效果是修改a的值以匹配b。赋值结果将是参考a的左值 如果运算符是用户定义的,那么从技术上讲,它可以有任何行为,但是通过执行类似的修改和返回左操

可能已得到答复,但找不到

C++中的

什么?

if(a=b)
什么意思? 对

我只是花了两个小时调试来找到它

if(a=b)
编译为

a=b
为什么编译器不标记

if(a=b)
if(a=b)
作为一个错误

在C++中,如果(a= b)是什么意思?< /P>
a=b
是赋值表达式。如果
a
的类型是基元的,或者如果赋值运算符是由编译器生成的,则此类赋值的效果是修改
a
的值以匹配
b
。赋值结果将是参考
a
的左值

如果运算符是用户定义的,那么从技术上讲,它可以有任何行为,但是通过执行类似的修改和返回左操作数来符合预期是常规的

返回的值被转换为
bool
,这将影响是否执行以下语句

if(a==b)
a==b
是一个等式比较表达式。没有分配任何内容。如果类型是基元类型,或者如果比较运算符是由编译器生成的,那么当操作数相等时,结果将为真,否则为假

如果操作符是用户定义的,那么从技术上讲它可以有任何行为,但是通过进行类似的相等性比较来符合期望是常规的

为什么编译器不标记

if(a=b)
if(a=b)
作为一个错误

因为只要
a
可与
b
赋值,它就是一个格式良好的表达式(片段)

if(a=b)
是一种表示变量设定值操作的常规模式,具有取决于新值的条件行为


有些编译器会选择性地用警告来“标记”它。

请注意,如果要赋值
inta=1,则需要使用if语句

if(a=2)
{

性病::难道这是一件合法的事情吗,只是奇怪,通常不是人们想要的。“通常不是人们想要的”不是编译时错误。您的假设不太正确。您遇到了一个常见的初学者问题。在if语句中,您进行了赋值,因此将b的值赋值给a。然后计算a的值,如果a不等于0,则为真。这是有效的c/c++语法,因此没有错误,但您的编译器应该给出yo警告编译器可以发出在条件下使用赋值的警告,阅读您的编译器手册并打开警告级别现代编译器会给您一个警告(gcc需要-Wall,clang开箱即用)这应该在每一本C++书中解释。你的书怎么说,它的解释中有什么你不懂的吗?StAcExver实际上不是一个正式的C++教科书的替代品。它不是一个错误,因为这是有效的C++代码。仅仅因为有效的C++代码做了一些你不想做的事情。esn不要让它成为一个错误。还有一个更简单的证明,试着把它颠倒过来:
if(0=a)
。编译器会抱怨的。