【发布时间】:2020-05-28 05:40:44
【问题描述】:
Metal 规范规定不允许使用递归函数。然而这编译得很好:
int b(int c) {
if (c == 1)
return b(c++);
else if (c == 2)
return b(c + 2);
else
return c;
}
这是为什么呢? Metal 使用的递归定义是什么?它引用了 C++14 规范的第 5.2.2 节,它也没有给出“递归”的任何定义,因此我希望上面是递归的标准示例。
即使我这样做,它仍然可以编译:
int b(int c) {
return b(c + 2);
}
什么给了?!
【问题讨论】:
-
如果你尝试编译一个非尾递归函数会发生什么?
-
听起来像一个错误。如果我是你,我会直接跟进苹果,看看你是否能找出发生了什么。您还应该指定您正在使用的金属编译器(转译器?)的确切版本。