returns "Call to a member function getQuery() on null"
你能告诉我为什么它是一个赋值而不是括号中的布尔表达式吗?在什么情况下,这项任务可以被视为“真实”或“虚假”?
答案 0 :(得分:2)
引用C11
,章节§6.5.16,分配运算符(强调我的)
赋值运算符将值存储在左操作数指定的对象中。 <强>一种 赋值表达式具有赋值后的左操作数的值, 111)但不是 左值。
因此,首先进行赋值,然后,已分配的值将用作if
中的条件语句。
所以,在
的情况下if (p = 0 )
将评估为FALSE和
if (p = 5)
将为TRUE。
答案 1 :(得分:0)
C认为任何非零都是true
,而任何0都是假的。
此作业的值等于它指定给vnd
的值,在本例中为struct diam_vnd_t *
。 if语句在分配后检查vnd
是否为NULL
。
这相当于:
vnd = (struct diam_vnd_t *)g_hash_table_lookup(vendors,vend);
if (vnd) {...}
答案 2 :(得分:0)
“等于”的逻辑运算符为==
当您说vnd = (struct...
时,您要将=
之后的所有内容分配给变量vnd
。如果您想要真或假,则需要使用==
答案 3 :(得分:0)
总是使用一个等号完成分配。 =
int i;
i = 0; //assignment
这将0赋给一个名为i
的整数。
你的if语句也会发生同样的事情。是否在if语句中是无关紧要的。
(vnd = (struct diam_vnd_t *)g_hash_table_lookup(vendors,vend))
要执行布尔表达式,您需要使用==
。
(vnd == (struct diam_vnd_t *)g_hash_table_lookup(vendors,vend))
根据2项
的比较,这将返回true或false