在最近的一次采访中,我被问到一个非常奇怪的问题。面试官问我如何使用编译器特性来计算1 + 2 + 3 + ... + 1000。这意味着我不被允许编写程序并执行它,但我应该只编写一个程序,它可以驱动编译器在编译时计算这个和,并在编译完成时打印结果。作为一个提示,他告诉我,我可以使用泛型和预处理器特性的编译器。可以使用 C + + 、 C # 或 Java 编译器。有什么想法吗?
这个问题与计算没有任何循环 问这里的和无关。此外,应该注意的是,总和应该在编译过程中计算。仅使用 C + + 编译器指令打印结果是不可接受的。
通过阅读更多关于发布的答案,我发现使用 C + + 模板解决编译过程中的问题被称为 元编程。这是 Erwin Unruh 博士在标准化 C + + 语言的过程中偶然发现的一项技术。你可以在 元编程维基页面上阅读更多关于这个主题的内容。 似乎可以使用 Java 注释来编写程序。你可以看看下面 maress's的答案。
关于 C + + 中元编程的一本好书是 这个。如果感兴趣的话,值得一看。
Boost 的 MPL 这个链接是一个有用的 C + + 元编程库。