在我用它们执行操作之前,有些地方检查有效指针; 这些检查有时可以很深入地嵌套.
例如,我有
if (a)
{
if (a->b())
{
if (a->b()->c())
{
a->b()->c()->DoSomething();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不喜欢这个样子.有没有办法把它变成更具可读性的东西?理想的情况下,
if (a && a->b() && a->b()->c() )
{
...
}
Run Code Online (Sandbox Code Playgroud)
会很棒,但显然不会奏效.
编辑 - nvm我提出的例子正如大家所指出的那样工作.我测试了它是否有效,但我的测试中的代码中有一个错误.咄!
Whi*_*ind 28
为什么后者不起作用?
在C中,&&是短路运算符,因此从左到右进行评估,如果任何评估为假,则评估停止.
事实上,你可以写:
a && a->b() && a->b()->c() && a->b()->c()->DoSomething();
Run Code Online (Sandbox Code Playgroud)
Dan*_*llo 13
引自K&R 1:
表达由左
&&或||右连接或评估,并保证一旦知道真相或谎言,评估将立即停止.
因此,后者的例子将完美地运作,正如WhirlWind所指出的那样.
1 C编程语言,第二版,第21页.