5

我已经读过几次(例如,这里的Compiler: What if condition is always true / false)任何体面的 c++ 编译器都会选择退出类似

if(false)
{
 ...
}

但是如果有人故意跳进这个if(false)区块怎么办。我有这样的想法

#include <iostream>

void func(int part){
    switch (part) {
    case 0:{
        if(false)
            case 1:{std::cout << "hello" << std::endl;}
        break;
    }
    default:
        break;
    }
}

int main()
{
    func(0);
    func(1);
    return 0;
}

是否有任何像样的 c++ 编译器会尊重这种跳转,或者最终会出现一些选择退出的问题?

4

1 回答 1

8

该代码似乎不是未定义的行为。因此,任何优化都不允许产生任何影响代码行为的效果。

注意:与这种代码相关你不能做的一件事是“转到”局部变量的定义。但是这段代码没有这样做,所以没问题。

另一个注意事项:如果你在“真实”(不是玩具、实验、混淆练习等)程序中有这种代码,你真的应该将它重构为不会从任何阅读代码的人那里引出这么多 WTF 的东西。

于 2019-10-30T18:33:56.993 回答