c++有什么离谱的语法啊?
我来讲一个 关于 switch
和 case
的吧。
理论上 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# 可以,完成了逻辑上的自洽:
真是有趣。