什么是consteval?

Kev*_*inZ 30 c++ c++20 consteval

显然,consteval它将成为C++ 20中的关键字.它的cppreference页面目前是空白的.它会是什么以及它与它有什么关系constexpr

T.C*_*.C. 27

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

采用的论文是P1073R3,尚未公开,但可以使用以前的版本,并且介绍性(动机和高级别描述)部分大致相同(除了R3中的"源位置"部分被删除).

  • 不,你不能像constexpr一样。 (2认同)
  • 可能值得指出的是,这样做的动机是使函数依赖于不需要保留在二进制文件中的编译器数据结构。 (2认同)
  • @Andry:这不仅仅是编译时性的问题。问题是结果是错误的。查看:https://godbolt.org/z/12aZCH。结果取决于优化级别。 (2认同)
  • 这是否意味着 consteval 函数在运行时不可用? (2认同)
  • 这是正确的,@MarcusJ, consteval 函数在运行时不可用,因为除非在编译时知道它们的所有参数,否则无法调用它们。当然,如果这是真的,编译器可以(在编译时)找出这些例程返回的内容,而无需实际为它们生成代码。 (2认同)