C ++ Challenge: максимальное количество уникальных зарезервированных слов в одной логической строке кода? - PullRequest
2 голосов
/ 16 февраля 2011

У меня есть постоянный мысленный эксперимент о том, как написать строку кода на 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() в конец функции, чтобы получить еще одно ключевое слово.

Ответы [ 3 ]

10 голосов
/ 16 февраля 2011

Вы говорите строку кода на C ++?

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

Я шучу, я шучу.

0 голосов
/ 16 февраля 2011

если вы добавите тело к функции, вы можете добавить некоторые переменные register и auto, блок try {} catch() {}, switch с break и return и почти все остальные C ++ ключевые слова
Это действительно бесполезное упражнение.

0 голосов
/ 16 февраля 2011

Если вы разрешите C ++ 0x, вы можете вернуть decltype суммы объекта типа T и C.

...