C++ 给出不同结果的类似断言语句
在以下代码中:C++ 给出不同结果的类似断言语句,c++,assert,comma-operator,C++,Assert,Comma Operator,在以下代码中: #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 ); } #包括 #
#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 );
}
#包括
#包括
int main()
{
INTA,b;
cin>>a>>b;
c,d;
cin>>c>>d;
断言((a==b,a*b==9,c==d));
断言(a==b&&a*b==9&&c==d);
}
如果你:
第一个assert语句是否很弱,或者我对assert语句有什么不知道的吗?a==b,a*b==9,c==d是逗号表达式。用于: 在逗号表达式
E1,E2
中,计算表达式E1
,其
结果是(尽管如果它有类类型,则不会是
销毁),及其
副作用在表达式评估前完成E2
开始
逗号结果的类型、值和值类别
表达式正好是的类型、值和值类别
第二个操作数,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
才能通过检查
一,。输入不同的整数或字符,第一个assert语句将中止程序。(应该如此)
一般表达式中逗号运算符的含义
e1 , e2
is-计算子表达式e1
,然后计算e2
;表达式的值是e2
的值
那么,表达式的值呢
a==b,a*b==9,c==d
价值何在
c==d
在assert()
中使用此表达式时,如果c==d
导致false
,则无论a
和b
的值如何,assert()
都会导致程序终止
二,。但是,如果在此代码中输入相等的整数(3除外)和相同的字符,则第一条assert语句不会中止程序,而第二条assert语句会中止程序
逻辑与运算expr1和&expr2
采用短路行为。对于逻辑短路,只有当第一个操作数expr1
不能完全确定结果时,才会对第二个操作数expr2
求值。
也就是说,如果expr1
是逻辑0
(false),则不计算expr2
在第二个assert()中给出的表达式中
你有a*b==9
以及a==b
和c==d
。因此,只有当将3
输入到a
和b
并将相同的字符值输入到c
和d
时,此表达式才会生成true
,否则此表达式会生成false
,断言会导致程序终止
a==b && a*b==9 && c==d