在以下代码中:
#include <iostream>
#include <assert.h>
int main()
{
int a,b;
cin>>a>>b;
char c,d;
cin>>c>>d;
assert ((a==b,a*b==9,c==d));
assert ( a==b && a*b==9 && c==d );
}
如果您:
第一个断言语句是否很弱,或者我对断言语句是否有所了解?
[a==b,a*b==9,c==d
是comma expression;
在逗号表达式E1,E2中,对表达式E1求值,其结果将被丢弃(尽管它具有类类型,但不会销毁直到包含完整表达式的末尾),其在评估表达式E2之前完成副作用开始(请注意,用户定义的运算符不能保证排序)(直到C ++ 17)。
逗号结果的类型,值和值类别表达式恰好是该类型的类型,值和值类别第二个操作数E2。
它返回最后一个操作数作为其返回值,即c==d
。 a==b
和a*b==9
得到评估,但其结果被丢弃。因此assert ((a==b,a*b==9,c==d));
实际上只检查c==d
。
另一方面,assert ( a==b && a*b==9 && c==d );
检查所有条件;通过&&
连接的端口必须全部为true
才能通过检查。