加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何有效地调试constexpr函数?

发布时间:2020-12-16 03:00:50 所属栏目:百科 来源:网络整理
导读:在C 14中,我们得到了 upgraded version of constexpr ,这意味着现在可以使用循环,if-statement和switch. 递归是可能的,如C 11. 我明白constexpr函数/代码应该很简单,但仍然出现的问题是:如何有效地调试它? 即使在“C编程语言第四版”中也有一句话,调试可能
在C 14中,我们得到了 upgraded version of constexpr,这意味着现在可以使用循环,if-statement和switch.
递归是可能的,如C 11.

我明白constexpr函数/代码应该很简单,但仍然出现的问题是:如何有效地调试它?

即使在“C编程语言第四版”中也有一句话,调试可能很难.

解决方法

调试constexpr函数有两个重要的方面.

1)确保计算正确的结果

在这里,您可以使用常规单元测试,断言或运行时调试器来逐步执行代码.与这里测试常规功能相比,没有什么新鲜事.

2)确保在编译时可以进行评估

这可以通过将函数评估为constexpr变量赋值的右侧来进行测试.

constexpr auto my_var = my_fun(my_arg);

为了使它工作,my_fun可以a)只有编译时常量表达式作为实际参数.即my_arg是一个文字(内置或用户定义)或以前计算的constexpr变量或模板参数等,b)它只能在其实现中调用constexpr函数(因此没有虚拟,没有lambda表达式等).

注意:在您的constexpr函数的编译时评估期间,很难实际调试编译器的代码生成实现.您必须将一个调试器附加到编译器,实际上可以解释代码路径.也许将来有一些版本的Clang会让你这样做,但是现在的技术是不可行的.

幸运的是,由于您可以解析constexpr函数的运行时和编译时行为,所以调试它们并不像调试模板元程序那样简单(只能在编译时运行).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读