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

2023-12-10

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

在 C++11 中,函数没有返回类型推导。auto不是这里要推导的占位符类型。可以说它的意义超载了。

对于函数来说,auto只是意味着返回类型将被指定为尾随返回类型。您不能省略尾随返回,否则您的程序将格式错误。

此功能已添加到语言中,以允许返回类型规范依赖于函数参数或成员的封闭类。当达到尾随返回类型时,这些被视为“已看到”。

例如,在这个类中:

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

完整的封闭命名空间已经可见,并且bar可以使用不合格的 id 来指定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐