Как заставить компилятор C #, C ++ или Java вычислять 1 + 2 + 3 +… + 1000 во время компиляции?

В недавнем интервью мне задали действительно странный вопрос. Интервьюер спросил меня, как я могу вычислить 1 + 2 + 3 + ... + 1000, просто используя функции компилятора. Это означает, что мне не разрешено писать программу и выполнять ее, но я должен просто написать программу, которая могла бы заставить компилятор вычислить эту сумму во время компиляции и распечатать результат, когда компиляция завершится. В качестве подсказки он сказал мне, что я могу использовать обобщенные и препроцессорные функции компилятора. Можно использовать компилятор C ++, C # или Java. Любые идеи ???

Этот вопрос не связан с вычислением суммы без каких-либо циклов , задаваемых здесь . Кроме того, следует отметить, что сумму СЛЕДУЕТ вычислять во время компиляции. Печать только результата с использованием директив компилятора C ++ недопустима.


Читая больше об опубликованных ответах, я обнаружил, что решение проблем во время компиляции с использованием шаблонов C ++ называется метапрограммированием . Это метод, который был случайно открыт доктором Эрвином Унру в процессе стандартизации языка C ++. Вы можете прочитать больше об этой теме на вики-странице метапрограммирования . Кажется, что можно написать программу на Java, используя аннотации java. Вы можете взглянуть на ответ maress ниже.

Хорошая книга о метапрограммировании на C ++ - эта . Стоит взглянуть, если интересно.

Полезной библиотекой метапрограммирования C ++ является Boost MPL по этой ссылке .

121
задан Gupta 17 July 2018 в 23:19
поделиться