【发布时间】:2015-11-27 20:48:20
【问题描述】:
在 Scott Schurr 的演讲 "Introducing constexpr" at CppCon 的最后,他问“有没有办法毒化函数”?然后他解释说,这可以通过以下方式完成(尽管以非标准方式):
- 将
throw放入constexpr函数中 - 声明一个未解决的
extern const char* - 在
throw中引用未解决的extern
我觉得我在这里有点超出我的深度,但我很好奇:
- “毒化函数”是什么意思?
- 他概述的技术有什么意义/用处?
【问题讨论】:
-
从来没有听说过这个词,请用一个简洁的例子澄清一下!
-
@πάνταῥεῖ,我刚刚澄清了。这是一个“在小圈子里广为人知”的术语
-
他说的是确保每次调用
constexpr函数都在编译时进行评估。 -
@T.C.对——他提到
constexpr函数既可以在编译时使用,也可以在运行时使用。所以这是一种强制它的方法,这样你就不能在运行时使用它了?什么时候有用? -
特别是在 C++11 中,
constexpr函数通常不是最有效的实现,因为存在限制,因此可能不希望在运行时对其进行评估;或者,也许是错误情况(如他的示例)。