C++ 什么是康斯特瓦尔?

C++ 什么是康斯特瓦尔?,c++,c++20,consteval,C++,C++20,Consteval,显然,consteval将成为C++20中的一个关键字。当前为空。它将是什么以及它与constexpr有什么关系?它声明了立即函数,即必须在编译时求值以生成常量的函数。(在以前的文章版本中,它的拼写是constexpr!)。相反,constexpr函数可以在编译时或运行时进行计算,并且在所有情况下都不需要生成常量 采用的论文是,尚未公开,但可以获得,介绍部分(动机和高级描述)大致相同(除了R3中删除了“源位置”部分)。“显然,consteval将成为C++20中的一个关键字”-提供一个链接以支持

显然,
consteval
将成为C++20中的一个关键字。当前为空。它将是什么以及它与
constexpr
有什么关系?

它声明了立即函数,即必须在编译时求值以生成常量的函数。(在以前的文章版本中,它的拼写是
constexpr!
)。相反,
constexpr
函数可以在编译时或运行时进行计算,并且在所有情况下都不需要生成常量


采用的论文是,尚未公开,但可以获得,介绍部分(动机和高级描述)大致相同(除了R3中删除了“源位置”部分)。

“显然,consteval将成为C++20中的一个关键字”-提供一个链接以支持此断言。@NeilButterworth我已经链接到的cppreference页面声称它是。
decltype(std::declval)
'ish但是。。有趣的东西。@ NeilButterworth:通过这个推理,没有人可以称它为“C++ 20”,或者说甚至会有下一个版本的C++。询问在各种会议上根据WG21程序批准的即将推出的功能并非无理。我们可以基于
consteval
-ness重载吗?不,你不能,就像
constexpr
一样。也许值得指出的是,其动机是使函数依赖于编译器数据结构,而这些结构不需要保存在二进制文件中。@geza你不需要,但是,您可以通过使用
noexcept
操作符(对于
msvc
gcc
)或通过
内置常量p
操作符(对于
clang
gcc
)来测试表达式的编译时间。阅读以下内容了解详细信息:*没错,@MarcusJ,consteval函数在运行时不可用,因为除非在编译时知道它们的所有参数,否则无法调用它们。当然,如果这是真的,编译器可以(在编译时)计算出这些例程返回什么,而不需要实际为它们生成代码。