【问题标题】:C++11 constexpr to obsolete template meta-programming?C++11 constexpr 过时的模板元编程?
【发布时间】:2012-03-18 20:56:12
【问题描述】:

据我了解,constexpr 不像模板元编程那样不是图灵完备的,所以我相信这些是不一样的。那么问题是constexpr 在多大程度上让模板元编程过时了?

【问题讨论】:

  • constexpr 是图灵完备的(显然忽略了无穷大的要求)。
  • @R.MartinhoFernandes:如果constexpr 是图灵完备的,请仅使用constexpr 来建模两端可增长的整数列表。
  • @R.MartinhoFernandes:您可能会对将答案发布到stackoverflow.com/questions/9201506/… 感兴趣。
  • @R.MartinhoFernandes 证明可以简单得多。 constexpr 函数很简单 (?) µ-recursive。 QED。 (显然,无视现实世界的限制。)
  • 在聊天中进行了一些讨论后,我收回了这一点。这可能是可行的,但并非易事。

标签: c++ templates c++11 constexpr


【解决方案1】:

constexpr 绝对是图灵完备的。允许递归。它是定义在编译时和运行时工作的函数的便捷方式。 constexpr 函数,虽然只是函数,但不能对类型执行操作。 (当然,除非您使用模板元编程来定义所述功能。)

类模板和constexpr 都可以用来包含编译时常量表达式,但相似之处就到此为止了。它们不是多余的,TMP 不会很快消失。

不过,一些特别难看的编译时计算可能会更优雅地重写为适当的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2012-02-21
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多