使用C++尾随返回类型时auto的含义是什么?

Jam*_*sev 12 c++ c++11

而不是平常

void foo (void ) {
    cout << "Meaning of life: " << 42 << endl;
}
Run Code Online (Sandbox Code Playgroud)

C++11 允许是另一种选择,使用追踪回报

auto bar (void) -> void {
    cout << "More meaning: " << 43 << endl;
}
Run Code Online (Sandbox Code Playgroud)

在后者 - 什么是auto代表?

另一个例子,考虑功能

auto func (int i) -> int (*)[10] {

}
Run Code Online (Sandbox Code Playgroud)

同样的问题,auto这个例子中的含义是什么?

Ric*_*III 17

通常,autoC++ 11中的new关键字表示表达式的类型(在这种情况下是函数的返回类型)应该从表达式的结果中推断出来,在这种情况下,是在表达式之后发生的->.

没有它,函数将没有类型(因此不是函数),编译器最终会混淆.

  • @Jam:需要Auto,因为C++的语法要求返回类型.没有它你就不会定义一个函数,你会调用一个函数. (3认同)
  • ` - >`后面的内容不是使用其类型的表达式,它必须是一个类型.不要将尾随返回类型与`decltype`混淆(即使它们经常一起使用). (3认同)

Aja*_*jay 16

考虑一下代码:

template<typename T1, typename T2>
Tx Add(T1 t1, T2 t2)
{
    return t1+t2;
}
Run Code Online (Sandbox Code Playgroud)

这里的返回类型取决于表达式t1+t2,而表达式又取决于Add调用的方式.如果你把它称为:

Add(1, 1.4);
Run Code Online (Sandbox Code Playgroud)

T1会是int,而且T2double.结果类型现在是double(int + double).因此Tx应该(必须)使用auto和指定->

 template<typename T1, typename T2>
    auto Add(T1 t1, T2 t2) -> decltype(t1+t2)
    {
        return t1+t2;
    }
Run Code Online (Sandbox Code Playgroud)

你可以在我的文章中阅读它.