gpt4 book ai didi

c++ - 是否按照编写的顺序测试 ifs 是 if-else...if-else...if-else block ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:43 25 4
gpt4 key购买 nike

是否可以保证 if-else if-else if-else block 中的 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)if(myfunction())),因此应该执行它们如所写,但我想知道我是否遗漏了编译器可以做的一些优化,这会改变测试 ifs 的顺序。特别是,如果条件没有这样的副作用:

void test(int a)
{
if (a == 1)
{
doSomething1();
}
else if (a == 2)
{
doSomething1();
}
else if (a == 3)
{
doSomething1();
}
else
{
doSomething1();
}
}

最佳答案

Is there any guarantee that after being compiled (for release), the first if will be tested, then the second if, then the third if (and finally the else is executed if none of the condition was true).

是的,但不是专门针对 if 语句,所有 您的(单线程)代码。

C++ 代码从头到尾自上而下执行。唯一可能不是这种情况的情况是当您进行异步调用或有多个线程同时调用相同代码时。

关于c++ - 是否按照编写的顺序测试 ifs 是 if-else...if-else...if-else block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10521856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com