比较两者:
if (strstr(a, "earth")) // A1
return x;
if (strstr(a, "ear")) // A2
return y;
Run Code Online (Sandbox Code Playgroud)
和
if (strstr(a, "earth")) // B1
return x;
else if (strstr(a, "ear")) // B2
return y;
Run Code Online (Sandbox Code Playgroud)
就个人而言,我觉得这else是多余的,并阻止CPU进行分支预测.
在第一个中,当执行A1时,可以预解码A2.在第二个中,它将不会解释B2,直到B1被评估为假.
我发现使用后一种形式的很多(可能是大多数?)来源.虽然,后一种形式看起来更好理解,因为它不会明显return y只有在a =~ /ear(?!th)/没有else子句的情况下才会调用.
您的编译器可能知道这两个示例的含义完全相同.CPU分支预测没有进入它.
我通常会选择第一个对称选项.
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |