C ++中的编译时调试

问题描述

根据准则constexpr everything并在C ++ 20中引入consteval,在编译时将评估越来越多的代码。

这导致了一个显而易见的问题:我们如何调试它?

当前唯一的提示是编译器错误。但是,如果代码可以编译,但仍未达到预期的效果,该怎么办。有没有什么工具可以帮助您呢?有检查的可能性吗?

一个相关的问题是:如何知道哪些将在编译时真正“执行”,哪些将在运行时保持合格,尽管有限定符。

解决方法

我个人使用static_assert作为constexpr函数的调试器,虽然它不是最好的工具,但它可以代替if (irational_value) cout<<"bug";这样的代码 第六个斐波那契数实际上是13时,在编译时求值的愚蠢示例

#include <vector>
#include <iostream>

int main(){
    constexpr unsigned sixth_fib=[](){
        unsigned prev=1;
        unsigned sum=1;
        for (unsigned i=0;i<5;i++)
        {
            auto tmp=sum;
            sum+=prev;
            prev=tmp;

        }
        return sum;
    }();
    static_assert(sixth_fib==13);
    std::cout<<sixth_fib<<std::endl;

}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...