这里有一个游戏:要求写一个符合C++标准的程序,包含至少十个连续而且不同的关键字。连续是指不能被标识符、运算符、标点符号分割。注意这里的“不同”要求,别想用
int main() { return sizeof sizeof sizeof sizeof sizeof sizeof sizeof sizeof (int); }
这个交卷,而且这个可以任意长。动动脑经,应该是可以想出来的。我们从很久很久以前(long long ago)开始吧,
unsigned long long int ago;
const volatile unsigned long long int ago;
extern const volatile unsigned long long int ago;
extern inline const volatile unsigned long long int f();
template extern inline const volatile unsigned long long int operator *(const Type&);
template extern inline const volatile unsigned long long int operator and(const Type& lhs, const Type& rhs); // 如果允许运算符&变成关键字and
我们强调了不同的关键字,所以只好用 long int 而不是 long long int。
typeid 也可以级联,与 sizeof 不同的是,必须添加括号。如果参数是表达式而非数据类型,sizeof 可以不用加括号。new 则没有这个限制。
#include <typeinfo> int main() { const std::type_info& info = typeid(typeid(typeid(typeid(int)))); return 0; }
C++规范里还要求使用 typeid 关键字的时候必须 #include <typeinfo>,否则任何使用到的地方都是 ill-formed。new 有时候也需要 #include <new> 头文件。
sizeof new const volatile signed long int();
限定不同的关键字,目前最好的答案是:
int main() { if(false); else do throw sizeof new const volatile signed long int(); while(false); return 0; }