4

正如标题所问:是否可以确保在编译时最多调用一次 constexpr 函数?

如果函数不是 constepxr,这显然是不可能的;我可以编写一个在我按下空格键时调用的函数,因此编译器在编译时永远无法解决这个问题。

4

1 回答 1

13

简短回答:不,因为constexpr函数无法读取/设置外部状态。(它们可以有内部状态,但它们仍然需要是“纯的”)


真正的答案:可能是的,但这是一个坏主意。Filip Roséen有一系列博客文章,其中涵盖了constexpr通过滥用friendship 和 ADL 来实现有状态功能:

该技术非常神秘和复杂。它被 CWG 认为是对功能的滥用,它试图通过 issue #2118使其格式不正确

于 2017-01-30T15:41:25.427 回答