我一直在想,如果我有这样的功能:
bool Foo::Bar()
{
return A() || B() || C();
}
Run Code Online (Sandbox Code Playgroud)
如果A()返回true,Bar()会立即返回true还是在评估最终值之前仍会计算B()和C()的结果?
如果A()为真,则不会评估B和C. 这称为操作员短路.
类似地,在声明如A && B && C,如果A是假,既不B或C进行评价.
这不仅仅是一种优化; 它在何时B或C依赖时特别有用A.例如,您可以测试指针指向某个东西并在单个语句中调用指向的对象上的方法:
if (my_pointer && my_pointer->some_method() > 9) {
}
Run Code Online (Sandbox Code Playgroud)