您正在使用短路或。如果第一个参数为true,则整个表达式为true。
如果添加编译器使用的隐式括号可能会有所帮助
编辑 :正如Chris Jester-Young所说,这实际上是因为逻辑运算符必须从左到右的关联性:
if (func1() || (func2() && func3()))
func1返回之后,它变为:
if (true || (func2() && func3()))
评估短路或后,它变为:
if (true)

您正在使用短路或。如果第一个参数为true,则整个表达式为true。
如果添加编译器使用的隐式括号可能会有所帮助
编辑 :正如Chris Jester-Young所说,这实际上是因为逻辑运算符必须从左到右的关联性:
if (func1() || (func2() && func3()))
func1返回之后,它变为:
if (true || (func2() && func3()))
评估短路或后,它变为:
if (true)