跳转到if(false)块是否有任何问题?

eze*_*ing 5 c++ duffs-device

我已经读过好几次了(例如,这里的编译器:如果条件始终为true / false怎么办),任何像样的c ++编译器都会选择退出

if(false)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

但是,如果有意跳入此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;
}
Run Code Online (Sandbox Code Playgroud)

是否有任何体面的C ++编译器会尊重这种跳跃,还是最终会在退出时出现一些问题?

hyd*_*yde 8

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

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

另一个注意事项:如果您在“真实的”程序(而不是玩具,实验,混淆练习等)中包含此类代码,则应将其重构为不会引起阅读任何代码的WTF过多的东西。

  • @jxh有趣。实际上,现在我想到了,一两个礼拜前我可能已经有了一个用例……除了它不会在代码审查中飞起来:-D (2认同)