我已经读过好几次了(例如,这里的编译器:如果条件始终为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 ++编译器会尊重这种跳跃,还是最终会在退出时出现一些问题?
该代码似乎不是未定义的行为。因此,不允许任何优化产生任何会影响代码行为的效果。
注:与此相关的样的代码,你不能做的一件事就是“转到”在局部变量的定义。但是这段代码没有做到这一点,所以没有问题。
另一个注意事项:如果您在“真实的”程序(而不是玩具,实验,混淆练习等)中包含此类代码,则应将其重构为不会引起阅读任何代码的WTF过多的东西。
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |