正如标题所示:是否有可能确保在编译时最多调用一次constexpr函数?
如果功能不是constepxr,这显然是不可能的;每当我按空格键时,我都可以编写一个被调用的函数,因此编译器永远无法在编译时解决这个问题。
答案 0 :(得分:13)
简答:不,因为constexpr
函数无法读取/设置外部状态。 (他们可以有内部状态,但他们仍然需要“纯粹”)。
真实答案:可能是的,但这是一个坏主意。 FilipRoséen有一系列博客文章,通过滥用constexpr
发货和ADL来涵盖有状态friend
功能的实施:
"NON-CONSTANT CONSTANT-EXPRESSIONS IN C++" - (cached by Google)
"HOW TO IMPLEMENT A CONSTANT-EXPRESSION COUNTER IN C++" - (cached by Google)
"HOW TO IMPLEMENT A COMPILE-TIME META-CONTAINER IN C++" - (cached by Google)
这项技术非常晦涩难懂。它被认为是CWG滥用功能which is trying to make it ill-formed with issue #2118。