是否有可能确保在编译时最多调用一次constexpr函数?

rwo*_*ols 4 c++ c++11 c++14 c++17 c++20

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

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

Vit*_*meo 13

简答:不,因为constexpr功能无法读取/设置外部状态.(他们可以有内部状态,但他们仍然需要"纯粹").


真实答案:可能是的,但这是一个坏主意.FilipRoséen发布了一系列博客文章,constexpr通过滥用friend船只和ADL来实现有状态功能:

这项技术非常晦涩难懂.它被认为是由CWG的功能滥用,这是试图使它形成不良与问题#2118.

  • 这三篇文章读得很好,所以+1来自我!你可能没有人应该使用这些技术. (2认同)