auto main() - > int是什么意思?

时间:2014-01-13 06:50:30

标签: c++ c++11

我碰巧遇到了C ++ 11视频中的以下代码片段,作者使用

auto main()->int

我不明白这一点。我尝试使用g++-std=c++11中进行编译,但它确实有用。 有人可以向我解释这里发生了什么吗?我尝试使用“auto main() - > int”进行搜索,但没有找到任何帮助。

3 个答案:

答案 0 :(得分:38)

C ++ 11为尾随返回类型引入了一种表示法:如果函数声明与auto一起引入,则返回类型将在参数和{{1}之后指定} 序列。也就是说,所有这一切都是宣告->返回main()

尾随返回类型的重要性主要用于函数模板,现在可以使用函数的参数和int来确定返回类型。例如:

decltype()

这声明函数template <typename M, typename N> auto multiply(M const& m, N const& n) -> decltype(m * n); 返回multiply()生成的类型。在m * n前面使用decltype()将无效,因为multiply()m尚未宣布。

虽然它主要用于功能模板,但相同的表示法也可用于其他功能。使用C ++ 14,在某些条件下使用n引入函数时,甚至可以省略尾随返回类型。

答案 1 :(得分:12)

这是C ++ 11中引入的统一函数声明语法尾随返回类型

你不能对lamdas使用任何其他语法,对于结果类型依赖于参数的函数模板它也非常方便。

如果你想选择一个单一语法(我认为这是一个好主意),那么你没有任何选择:旧语法不能用于lambda。

这样做的原因包括:

  • 好吧,语法。

  • 功能名称始终位于同一位置,支持快速扫描代码。

  • 同样适用于结果类型,易于视觉识别(另外,当它是成员函数类中定义的类型时,您不必对其进行限定)。

反对的原因包括一些额外的冗长,使用不懂这种语法的旧编译器,任何新的东西都会感到可怕和不舒服而且很奇怪。

答案 2 :(得分:8)

它被称为 trailing-return-type 。它在使用模板的通用代码中特别有用,其中返回类型取决于涉及一些其他模板参数的表达式。它也用于lambda。

以下是一个例子:

template<typename T, typename U>
auto add(T t, U u) -> decltype(t+u)
{
   return t + u;
}

此处返回类型取决于表达式t+u。因此无论表达式是什么类型,也是函数的返回类型,由decltype(t+u)表示。