考虑如下示例:
if (flag)
for (condition)
do_something();
else
for (condition)
do_something_else();
如果在 for 循环内部 flag 没有发生改变,那么这应该与以下语句在语义上等价:for (condition)
if (flag)
do_something();
else
do_something_else();
只有在第一种情况下,代码可能会更长(例如,如果使用了多个for
循环或者do_something()
是一个与do_something_else()
基本相同的代码块),而在第二种情况下,标志被检查多次。
我很好奇当前的C++编译器(尤其是g++)是否能够优化第二个示例以消除for
循环内部重复的测试。如果可以的话,在什么情况下可能实现此优化?