我碰巧遇到了作者使用的C++ 11视频中的以下代码片段
auto main()->int
Run Code Online (Sandbox Code Playgroud)
我不明白这一点.我尝试编译g++使用-std=c++11,它的工作原理.有人可以向我解释这里发生了什么吗?我试图使用"auto main() - > int"进行搜索,但没有找到任何帮助.
Die*_*ühl 42
C++ 11引入了尾随返回类型的表示法:如果引入了函数声明auto,则将在参数和->序列之后指定返回类型.也就是说,所有这一切都是宣布main()返回int.
尾随返回类型的重要性主要用于函数模板,现在可以使用函数的参数decltype()来确定返回类型.例如:
template <typename M, typename N>
auto multiply(M const& m, N const& n) -> decltype(m * n);
Run Code Online (Sandbox Code Playgroud)
这声明函数multiply()返回由生成的类型m * n.decltype()在前面使用multiply()将是无效的,因为m并且n尚未宣布.
虽然它主要用于功能模板,但相同的表示法也可用于其他功能.使用C++ 14,auto在某些条件下引入函数时,甚至可以省略尾随返回类型.
Che*_*Alf 12
这是一个统一的函数声明语法,尾部返回类型,在C++ 11中引入.
您不能对lamdas使用任何其他语法,并且对于结果类型依赖于参数的函数模板也非常方便.
如果你想选择一个单一的语法(我认为这是一个好主意),那么你没有任何选择:旧的语法不能用于lambdas.
这样做的原因包括:
好吧,单一的语法.
功能名称始终在视觉上相同,支持快速扫描代码.
同样适用于结果类型,简单的视觉识别(另外,当它是成员函数类中定义的类型时,您不必限定它).
反对的原因包括一些额外的冗长,使用不理解这种语法的旧编译器,任何新的东西都会感到可怕和不舒服而且很奇怪.
它被称为trailing-return-type.它在使用模板的通用代码中特别有用,其中返回类型取决于涉及一些其他模板参数的表达式.它也用于lambda.
这是一个例子:
template<typename T, typename U>
auto add(T t, U u) -> decltype(t+u)
{
return t + u;
}
Run Code Online (Sandbox Code Playgroud)
这里的返回类型取决于表达式t+u.因此无论表达式是什么类型,也是函数的返回类型,由表示decltype(t+u).
| 归档时间: |
|
| 查看次数: |
5111 次 |
| 最近记录: |