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
意思?它是一个没有返回aB
(带有尾部返回类型语法)的参数的函数,还是对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;