avatar
问个简单的C++问题# Programming - 葵花宝典
t*n
1
if ((node==NULL) || (node->next == NULL))
这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应
该要拆成两句吗?
if (node==NULL)
。。。。。。。。。。。。。。;
if (node-〉next == NULL)
。。。。。。。。。。。。。。。。。。。;
想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第
二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认
一下。
avatar
P*e
2
对,写在一起方便
以前有面食题就是考这个的

【在 t*****n 的大作中提到】
: if ((node==NULL) || (node->next == NULL))
: 这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应
: 该要拆成两句吗?
: if (node==NULL)
: 。。。。。。。。。。。。。。;
: if (node-〉next == NULL)
: 。。。。。。。。。。。。。。。。。。。;
: 想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第
: 二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认
: 一下。

avatar
E*V
3
这个市C的臭规矩,只看第一个,如果第一个true的话

【在 t*****n 的大作中提到】
: if ((node==NULL) || (node->next == NULL))
: 这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应
: 该要拆成两句吗?
: if (node==NULL)
: 。。。。。。。。。。。。。。;
: if (node-〉next == NULL)
: 。。。。。。。。。。。。。。。。。。。;
: 想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第
: 二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认
: 一下。

avatar
t*n
4
确实这样,改成
if((head->next == NULL) || (head == NULL) )
在head=NULL的情况,会crash

【在 E*V 的大作中提到】
: 这个市C的臭规矩,只看第一个,如果第一个true的话
avatar
g*g
5
No, if node==NULL is true, the 2nd condition won't be executed.

【在 t*****n 的大作中提到】
: if ((node==NULL) || (node->next == NULL))
: 这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应
: 该要拆成两句吗?
: if (node==NULL)
: 。。。。。。。。。。。。。。;
: if (node-〉next == NULL)
: 。。。。。。。。。。。。。。。。。。。;
: 想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第
: 二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认
: 一下。

avatar
p*f
6
that is called short-circuit evaluation. If node==NULL, the second boolean
function will not be evaluated.

【在 t*****n 的大作中提到】
: if ((node==NULL) || (node->next == NULL))
: 这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应
: 该要拆成两句吗?
: if (node==NULL)
: 。。。。。。。。。。。。。。;
: if (node-〉next == NULL)
: 。。。。。。。。。。。。。。。。。。。;
: 想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第
: 二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认
: 一下。

avatar
l*c
7
条件短路不是一定的。绝大多数编译器会这么做,但是可以关掉的。

【在 P********e 的大作中提到】
: 对,写在一起方便
: 以前有面食题就是考这个的

avatar
t*t
8
name a C/C++ compiler that has this option?

【在 l*****c 的大作中提到】
: 条件短路不是一定的。绝大多数编译器会这么做,但是可以关掉的。
avatar
l*c
9
嗯,查了一下,我错了。C99已经规定必须short-circuit了。sigh,我怎么记得看到过
这个选项?可能不是C++编译器?

【在 t****t 的大作中提到】
: name a C/C++ compiler that has this option?
avatar
t*t
10
i think short-circuit evaluation is defined in k&r...i could be wrong, but
it's definitely in c89.
you probably meant pascal.

【在 l*****c 的大作中提到】
: 嗯,查了一下,我错了。C99已经规定必须short-circuit了。sigh,我怎么记得看到过
: 这个选项?可能不是C++编译器?

avatar
l*c
11
嗯,又查了一下,是我看错了,K&R里面定义的。我就是奇怪,我怎么就记得看到过可
以关掉的呢?

【在 t****t 的大作中提到】
: i think short-circuit evaluation is defined in k&r...i could be wrong, but
: it's definitely in c89.
: you probably meant pascal.

avatar
l*c
12
嗯,估计是Pascal了,当年用的多啊

【在 t****t 的大作中提到】
: i think short-circuit evaluation is defined in k&r...i could be wrong, but
: it's definitely in c89.
: you probably meant pascal.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。