【发布时间】:2020-05-19 10:30:45
【问题描述】:
我在这里搜索了这个问题(关于 SO),据我所知,所有问题都假设什么是编译时函数,但初学者几乎不可能知道这意味着什么,因为要知道的资源是相当罕见。
我找到了简短的wikipedia article,它展示了如何通过在 C++ 中编写以前从未见过的枚举使用来编写难以理解的代码,还有一个 video,它是关于它的未来,但对此几乎没有解释。
在我看来,用 C++ 编写编译时函数有两种方法
constexprtemplate<>
我已经对它们进行了简短的介绍,但我不知道它们是如何出现在这里的。
谁能用一个足够好的例子来解释编译时函数,使它包含它最相关的特性?
【问题讨论】:
-
我建议你把问题的范围缩小一些,因为现在它就像一个问题中的 5-10 个问题。您可以随时创建新的
-
对我来说似乎足够好
-
编译时函数是一个函数,它将由编译器编译时执行。我认为这就是这么简单。所以
consteval函数是一个编译时函数。constexpr函数可以在编译时执行,如果在核心常量表达式中调用它。模板不是编译时函数。它们是在编译时生成的,但不是在编译时执行的(至少,不能保证)。您可以使用模板在编译时计算事物,但它们不是函数。 -
我现在想到的是:源代码 => 目标代码 => 机器代码 => 运行。把它放在哪里?
-
@AjayMishra 这是一种简化的图片。例如,预处理器首先运行,模板有点像预处理器——模板本身被实例化,创建新的(隐藏的)源代码,然后编译成目标代码。顺便说一句,目标代码是机器代码。也许,您可以编写可执行的二进制文件,而不是机器代码。
标签: c++ templates constexpr compile-time