为什么我们必须在箭头符号后再次指定数据类型( - >)

时间:2017-09-10 19:23:57

标签: c++ c++11

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);
 }

2 个答案:

答案 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中添加。