如果我们考虑实际计算机的限制 - 例如有限的内存和MAX_INT的有限值 - 那么,当然,constexpr(以及整个C ++)就不是图灵完备的。
但是如果我们去除这个限制 - 例如,如果我们将int视为完全任意的正整数 - 那么是的,C ++的constexpr部分将是图灵完备的。可以很容易地表示任何部分递归函数。
0,S(n)= n + 1和selectors I_n ^ m(x_1,...,x_n)= x_m和superposition显然可以使用constexpr表示。
原始递归可以直接完成:
constexpr int h(int x1, ..., int xn, int y) {
return (xn == 0) ? f(x1, ..., xn) : g(x1, ..., xn, y-1, h(x1, ..., xn, y-1));
}
对于部分递归,我们需要一个简单的技巧:
constexpr int h(int x1, ... int xn, int y = 0) {
return (f(x1, ... xn, y) == 0) ? y : h(x1, ..., xn, y+1);
}
因此,我们可以将任何部分递归函数作为constexpr。