时序点有关问题
时序点问题,请指教
MyClass *p;
...
if(p-> MyFunc1() && p-> MyFunc2() )
{
p-> MyFunc3();
}
这样的语句,由于&&操作符是一个时序点,所以在执行的时候,是先执行MyFunc1,再执行MyFunc2然后做 && 操作呢,还是判断MyFunc1 如果为 false 就不执行 MyFunc2呢?
时序点的意思,只是说先执行MyFunc1,再执行MyFunc2,并没有说是否一定会执行MyFunc2?如果不执行的话,那就和下面的语句等价了吗?
if(p-> MyFunc1() )
if( p-> MyFunc2() )
{
p-> MyFunc3();
}
------解决方案--------------------
&&,||等是C++语言中少数的几个明确规定了的,我觉得可以大胆使用,比如最常见的:
if(p && p-> Func1()) { ... }
这种大胆使用即可,永远不会引发空指针错误。
MyClass *p;
...
if(p-> MyFunc1() && p-> MyFunc2() )
{
p-> MyFunc3();
}
这样的语句,由于&&操作符是一个时序点,所以在执行的时候,是先执行MyFunc1,再执行MyFunc2然后做 && 操作呢,还是判断MyFunc1 如果为 false 就不执行 MyFunc2呢?
时序点的意思,只是说先执行MyFunc1,再执行MyFunc2,并没有说是否一定会执行MyFunc2?如果不执行的话,那就和下面的语句等价了吗?
if(p-> MyFunc1() )
if( p-> MyFunc2() )
{
p-> MyFunc3();
}
------解决方案--------------------
&&,||等是C++语言中少数的几个明确规定了的,我觉得可以大胆使用,比如最常见的:
if(p && p-> Func1()) { ... }
这种大胆使用即可,永远不会引发空指针错误。