C++ 当使用C++;尾随返回类型?

C++ 当使用C++;尾随返回类型?,c++,c++11,C++,C++11,而不是通常 void foo (void ) { cout << "Meaning of life: " << 42 << endl; } 在后者中-什么是auto设计用来表示的? 另一个例子,考虑函数 auto func (int i) -> int (*)[10] { } 同样的问题,在本例中,auto的含义是什么?一般来说,C++11中的新关键字auto表示应该从表达式的结果推断表达式的类型(在本例中是函数的返回类型),在本例中,在-

而不是通常

void foo (void ) {
    cout << "Meaning of life: " << 42 << endl;
}
在后者中-什么是
auto
设计用来表示的?

另一个例子,考虑函数

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

}

同样的问题,在本例中,
auto
的含义是什么?

一般来说,C++11中的新关键字
auto
表示应该从表达式的结果推断表达式的类型(在本例中是函数的返回类型),在本例中,在
->
之后发生了什么

如果没有它,函数将没有类型(因此不是函数),编译器最终将陷入混乱。

请考虑以下代码:

template<typename T1, typename T2>
Tx Add(T1 t1, T2 t2)
{
    return t1+t2;
}
T1
将是
int
T2
将是
double
。生成的类型现在是
double
(int+double)。因此
Tx
应该(必须)使用
auto
->

 template<typename T1, typename T2>
    auto Add(T1 t1, T2 t2) -> decltype(t1+t2)
    {
        return t1+t2;
    }
模板
自动添加(T1、T2)->取消类型(T1+T2)
{
返回t1+t2;
}

您可以在中阅读。

我认为答案相对简单,其他答案中没有涉及

基本上,如果没有
auto
,就存在歧义,因此委员会决定“您需要
auto
来避免这些歧义”

现在,什么是
f()->B
意思?它是一个没有返回a
B
(带有尾部返回类型语法)的参数的函数,还是对a*f()的函数调用

如果在尾部返回类型语法的开头没有所需的
auto
,我们将无法判断。使用
auto
,很明显这是一个函数调用


因此,为了避免这里的不明确,我们只需要在任何使用尾部返回类型的函数声明的开头使用
auto

必须了解这一点-但我猜没有-您没有返回任何内容;-)请重读这个问题。课程的返回类型为
void
,在此上下文中
auto
的含义是什么?第二次错过了->void应该使用的问题:我相信
->
后面的内容表示返回类型,在本例中
void
@Jam yes,这意味着返回类型应该从该表达式(主要用于
decltype
)中推断出来,我对返回类型是明确的,对吗?为什么代码[Auto[还需要?@ CAM:AUTO是必需的,因为C++的语法需要返回类型。如果没有它,你就不会定义函数,你会调用函数。
->
后面的不是使用类型的表达式,而是类型。不要将尾部返回类型与
decltype
混淆(即使它们经常一起使用)。
Add(1, 1.4);
 template<typename T1, typename T2>
    auto Add(T1 t1, T2 t2) -> decltype(t1+t2)
    {
        return t1+t2;
    }
class A {
    T B;
};

class B;

A* f();

f()->B;