C ++挑战:一个逻辑代码行中最大的唯一保留字?

时间:2011-02-16 08:54:28

标签: c++ puzzle reserved-words

我有一个长期的思想实验,关于如何编写一行C ++代码,其中包含最大数量的唯一保留字。在此挑战中,您可以根据需要复制关键字,但重要的是您使用的唯一关键字的数量。例如,如果你写

void MyFunction(int, int, int, int);

有四个int实例,但上面的行得分为2,因为它只有两个唯一的关键字(voidint,即)。不过,这一行

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 MyEnumstruct MyStructunion MyUnion。是的,如果您在使用之前设置了相应的类型,那么会在g++中进行编译(尽管它确实会对export发出警告。)

我很好奇是否有人认为可以将更多独特的关键字塞进一行代码中。有人可以成为我的榜样吗?或者找到一种让它变得更恶魔的方法?

我知道C ++是自由形式的,因此“代码行”并不是一个非常好的结构度量,但我认为我们可以对这意味着什么进行合理的解释。

编辑:只需在函数末尾添加throw()即可在其中再添加一个关键字。

3 个答案:

答案 0 :(得分:10)

你说的一行C ++代码?

// asm auto bool break case catch char class const ...

我小孩,我小时候。

答案 1 :(得分:0)

如果允许使用C ++ 0x,则可以返回T和C类型对象总和的decltype

答案 2 :(得分:0)

如果您向该函数添加了一个正文,则可以添加一些registerauto变量,try {} catch() {}块,switchbreak以及一个return和几乎所有其他C++ keywords
这实际上是徒劳无功的。