【发布时间】:2017-06-15 20:01:38
【问题描述】:
正如标题所问:是否可以确保 constexpr 函数在编译时最多被调用一次?
如果函数不是ConderepXR,则这显然不会有可能;我可以编写一个在我按下空格键时调用的函数,因此编译器在编译时永远无法解决这个问题。【问题讨论】:
-
constexpr 表达式/函数没有副作用,因此它们被调用的频率并不重要(运行时/性能除外)。那么你为什么要确保只评估一次consexpr? span>
-
@WernerHenze “那么你为什么要确保一个 constexpr 只被评估一次呢?”只是好奇心,找到语言的界限: - ) span>
-
@rwols:问题是“只调用一次”对于
constexpr函数在编译时是一个毫无意义的概念。它可能实际上被称为一个半时间(!) - 实现可以缓存 constexpr 表达式的评估,这可以包括部分缓存。 -
如果你使用预编译的头文件并在头文件中运行
constexpr函数为:constexpr auto result = function(args...);,那么,也许编译器只会计算一次
标签: c++ c++11 c++14 c++17 c++20