【发布时间】:2020-12-05 17:20:14
【问题描述】:
在 constexpr everything 准则下以及随着 C++20 中 consteval 的引入,越来越多的代码在编译时被评估。
这就引出了一个显而易见的问题:我们如何调试它?
目前唯一的提示是编译器错误。但是如果代码编译了,但仍然没有达到预期的效果怎么办。有什么工具可以帮助解决这个问题吗?有什么检查的可能性吗?
一个相关的问题是:如何知道哪些会在编译时真正“执行”,哪些会在运行时保留,尽管有限定符。
【问题讨论】:
-
constexpr函数可以在非 constexpr 上下文中调用,您可以将它们作为常规函数进行调试。 -
@Jarod42:这不适用于已标记的
consteval。您也不能轻松地使用 constexpr 函数进行调试;虽然您可以使用std::is_constant_evaluated,但这无助于复制常量表达式中的任何用法。 -
偶然发现这个 2017 Herb Sutter 演讲:youtu.be/4AfRAVcThyA?t=1807 右下角说:C++17 => 需要编译时调试。一分钟后,他甚至列出了 compile-time watch。从那以后过去的三年里,它做了什么? ;-)
标签: c++ compilation constexpr c++20 consteval