c++有什么离谱的语法啊?

发布时间:
2024-09-01 02:43
阅读量:
32

我来讲一个 关于 switchcase 的吧。

理论上 case 是定义了一个 label,和与 goto 一起使用的那个 label 是本质上相同的,都用来标识一个语句(statement)。它的作用仅仅在于在程序执行到 switch 后面的 condition 的时候跳转到一个 case 标识的语句。而作为 label,case 并不会产生其他影响,因此甚至可以被复合语句跨过。所以下面的代码是合法的:

#include <iostream> using namespace std; int main() { int x = 2; switch (x) { case 1: cout << "1" << endl; break; case 2: cout << "2" << endl; cout << "3" << endl; if (false) { cout << "4" << endl; cout << "5" << endl; case 3: cout << "6" << endl; case 7: cout << "8" << endl; } else { cout << "9" << endl; } cout << "10" << endl; break; } return 0; }

这段代码会输出 2 3 9 10

不过遗憾的是,C++ 的 goto 不能跳转到 case label,但 C# 可以,完成了逻辑上的自洽:

真是有趣。

END