auto
可以推断出返回类型,那么为什么我们需要使用尾随箭头符号( - >)来推断返回类型
#include <iostream>
auto add (int i, int j)->int
{
return i+j;
}
int main()
{
int x=10,y=20;
std::cout<<add(x,y);
}
答案 0 :(得分:8)
在C ++ 11中,函数没有返回类型推导。 auto
不是此处要推断的占位符类型。你可以说它的含义过载了。
对于函数,auto
仅表示将返回类型指定为尾随返回类型。你不能省略追踪回报,否则你的程序就会格式不正确。
此功能已添加到语言中,以允许返回类型规范依赖于函数参数或封闭成员类。这些被认为是&#34;看到&#34;到达尾随返回类型时。
例如,在这个课程中:
namespace baz {
struct foo {
enum bar {SOMETHING};
bar func();
};
}
如果我们在C ++ 03中实现该成员函数,则必须如下所示:
baz::foo::bar baz::foo::func() {
return SOMETHING;
}
我们必须为返回类型指定完全限定名称。这很快就会变得难以理解。但是使用尾随返回类型:
auto baz::foo::func() -> bar {
return SOMETHING;
}
已经看到完整的封闭命名空间,并且可以使用非限定ID指定bar
。
答案 1 :(得分:1)
不,在C ++ 11中使用auto
作为函数的返回类型并不能推断它的类型,你仍然必须明确指定要返回的类型。通过auto
返回类型的类型推导仅在C ++ 14中添加。