我刚刚了解到C++14中推出的新特性“返回类型推断”,并且对此类函数中的递归有疑问。我了解到该函数的第一个返回值必须允许自动推导返回类型。
维基百科提供的例子完全符合这个规则。
我的问题是: 为什么当我将
维基百科提供的例子完全符合这个规则。
auto Correct(int i) {
if (i == 1)
return i; // return type deduced as int
else
return Correct(i-1)+i; // ok to call it now
}
auto Wrong(int i) {
if (i != 1)
return Wrong(i-1)+i; // Too soon to call this. No prior return statement.
else
return i; // return type deduced as int
}
我的问题是: 为什么当我将
Wrong(int i)
改成 Wrong(auto i)
后,Wrong
函数开始编译了?这个小改变背后隐藏着什么?
Wrong
转换成了一个函数模板。 - danielschemmelauto
作为参数是GCC的扩展,不是标准C++14。 - user3920237auto i
更改为常规模板函数 (template <typename T> auto Wrong(T i)
),它再次被拒绝。 - user743382