是否有任何保证,一个if-else if-else if-else
块的 ifs 会按照它们被写入的顺序进行测试。
我之所以这么问,是因为我经常尝试通过将最常见的情况放在首位来优化我的代码,并且我想知道编译器所做的一些优化是否会改变 if 的测试顺序。
所以,如果我正在编写这样的代码:
if (cond1) // First if (for the case I have the most often)
{
doSomething1();
}
else if (cond2) // Second if (for the second case I have the most often)
{
doSomething2();
}
else if (cond3) // Third if (for the third case I have the most often)
{
doSomething3();
}
else
{
doElse();
}
是否有任何保证在编译(用于发布)之后,将测试第一个 if,然后是第二个 if,然后是第三个 if(如果条件都不为真,则最后执行 else)。
我知道在调试时,ifs 是按照我编写它们的顺序执行的,但是当程序编译发布时它会保持不变(我主要使用最新版本的 g++ 和 Visual Studio)。
此外,由于条件可能对环境产生影响(如if (i=a)
or if(myfunction())
),它们应该按书面形式执行,但我想知道我是否遗漏了编译器可以做的一些优化,这会改变 ifs 的测试顺序. 特别是,如果这种情况没有这样的副作用:
void test(int a)
{
if (a == 1)
{
doSomething1();
}
else if (a == 2)
{
doSomething1();
}
else if (a == 3)
{
doSomething1();
}
else
{
doSomething1();
}
}