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

C++ 为什么必须在箭头符号(->;)后再次指定数据类型,c++,c++11,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); } #包括 自动添加(inti,intj)->int { 返回i+j; } int main() { int x=10,y=20

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);
 }
#包括
自动添加(inti,intj)->int
{
返回i+j;
}
int main()
{
int x=10,y=20;

std::cout在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;
}

已看到完整的封闭名称空间,并且可以使用非限定id指定
bar

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

完整的封闭名称空间已经出现,可以使用非限定id指定
bar

否,在C++11中,使用
auto
作为函数的返回类型不会推断它的类型,您仍然必须显式指定要返回的类型。通过
auto
返回类型进行的类型推断仅在C++14中添加。

<不,在C++ 11中使用函数>自动<代码>作为函数的返回类型不会推断出它的类型,你仍然必须明确地返回什么类型。类型推断通过“代码>自动< /Cord>”返回类型只在C++ 14中添加。

除非使用旧版本的C++,否则不需要它。我添加了C++ 11标签。^ ^,如果你有C++ 14和R的话。eturn类型推断,仅仅有一个箭头本身就是一个语法错误。auto add(inti,intj)->int{return i+j+3.5;}在这种情况下,Autoor或Real-Read优先使用不需要的,除非您使用的是C++的旧版本。我添加了C++ 11标签。^ ^虽然如果您有C++ 14和返回类型的演绎,只要有一个箭头本身就是一个语法错误。AutoDead(int i,int j)-int {返回i+j+3.5;}.在这种情况下,自动或尾部返回优先于相关阅读材料: