【发布时间】:2021-02-20 18:46:07
【问题描述】:
我知道需求的差异,我最感兴趣的是它带来的代码质量的好处。
我能想到的几件事:
- 读者只需阅读函数签名就知道该函数是在编译时评估的
- 编译器可能会发出更少的代码,因为
constevalfns 在运行时从不使用(这是推测性的,我没有这方面的真实数据) - 不需要有变量来强制ctfe,例子在最后
注意:如果代码质量太模糊,我知道有些人可能想结束这个问题,对我来说,代码质量并不是那么模糊的术语,但是......
example 其中constexpr 失败延迟到运行时:
constexpr int div_cx(int a, int b)
{
assert(b!=0);
return a/b;
}
int main()
{
static constexpr int result = div_cx(5,0); // compile time error, div by 0
std::cout << result;
std::cout << div_cx(5,0) ; // runtime error :(
}
【问题讨论】:
-
您是在询问
consteval的动机吗?我似乎记得具体的原因是表现和反思。我记得保持constexpr函数可用于运行时会产生性能成本。我还记得某些类型的反射类型只能在编译时存在或应该只在编译时存在(出于安全原因)。consteval将提供一种机制来强制执行此操作。 -
@Justin 对设计不感兴趣,更多不关心语言律师的普通开发人员可以从中获得什么......像斯科特迈耶斯的假设有效的 consteval 书这样的东西:)
-
我认为普通开发人员不会从
consteval还中受益。此功能只是为 C++ 中的静态反射奠定基础的一部分,届时它将非常有用。目前,我认为没有太多实际用途(除非您已经指出,当您真正关心不会为某些功能生成程序集时)。
标签: c++ constexpr c++20 consteval