我有一个长期的思想实验,关于如何编写一行C ++代码,其中包含最大数量的唯一保留字。在此挑战中,您可以根据需要复制关键字,但重要的是您使用的唯一关键字的数量。例如,如果你写
void MyFunction(int, int, int, int);
有四个int实例,但上面的行得分为2,因为它只有两个唯一的关键字(void
和int
,即)。不过,这一行
void MyFunction(int, double, short, long);
五个保留字的得分为5分。
到目前为止,我能够提出的最好的是
export template <typename T, class C>
inline void DiabolicalFunc (int, char, short,
long, double, signed,
unsigned, bool, float,
wchar_t, const int,
volatile int,
enum MyEnum,
void* (*)(size_t) = &(operator new),
void (*)(void*) = &(operator delete),
int = const_cast<int*>(static_cast<const int *>(reinterpret_cast<int*>(0))),
void* = dynamic_cast<void*>(reinterpret_cast<ios_base*>(0)),
bool = true, bool = false, int = sizeof(int),
const std::type_info& = typeid(int),
struct MyStruct = MyStruct(), union MyUnion = MyUnion(),
int = 0 and 0,
int = 0 bitand 0,
int = 0 bitor 0,
int = compl 0,
int = not 0,
int = 0 not_eq 0,
int = 0 or 0,
int = 0 xor 0) throw();
其中有39个保留字。但是,假定您在声明之前定义了enum MyEnum
,struct MyStruct
和union MyUnion
。是的,如果您在使用之前设置了相应的类型,那么会在g++
中进行编译(尽管它确实会对export
发出警告。)
我很好奇是否有人认为可以将更多独特的关键字塞进一行代码中。有人可以成为我的榜样吗?或者找到一种让它变得更恶魔的方法?
我知道C ++是自由形式的,因此“代码行”并不是一个非常好的结构度量,但我认为我们可以对这意味着什么进行合理的解释。
编辑:只需在函数末尾添加throw()
即可在其中再添加一个关键字。
答案 0 :(得分:10)
你说的一行C ++代码?
// asm auto bool break case catch char class const ...
我小孩,我小时候。
答案 1 :(得分:0)
如果允许使用C ++ 0x,则可以返回T和C类型对象总和的decltype
。
答案 2 :(得分:0)
如果您向该函数添加了一个正文,则可以添加一些register
和auto
变量,try {} catch() {}
块,switch
和break
以及一个return
和几乎所有其他C++ keywords
这实际上是徒劳无功的。