4

我很好奇在 C++11 中使用 auto 关键字。

对于函数定义,您必须编写函数的返回类型:

auto f (int x) -> int { return x + 3; }; //success
auto f (int x)  { return x + 3; }; //fail

但在这个例子中,它们都可以工作:

auto f = [](int x) { return x + 3; }; //expect a failure but it works
auto f = [](int x) -> int { return x + 3; }; // this is expected code

谢谢。

4

2 回答 2

6

在 C++11 中,如果 lambda 表达式可以毫无歧义地推断出确切的返回类型,则它可以省略其返回类型。但是,此规则不适用于常规功能。

int f() { return 0; } // a legal C++ function

auto f() -> int { return 0; } // a legal C++ function only in C++11

auto f() { return 0; } // an illegal C++ function even if in C++11
于 2013-03-14T13:18:11.310 回答
1
  1. 如果您需要在“->”之后指定返回类型(就像在 C+11 中一样) - 在函数声明中使用“auto”有什么意义?这就好像在说:“这个函数可以返回任何东西,但实际上它只是这个类型”。呃?

  2. 然后,如果您不需要在“->”之后指定返回类型(就像在 C++14 中一样):假设您没有函数的源代码,而是目标文件和头文件。你怎么知道函数返回什么(返回类型)?

到目前为止,函数声明中的“auto”似乎是编写不可读代码的另一种方式。好像在 C++ 中已经没有足够的方法来做到这一点。

而在函数体内“auto”是一个很好的“语法糖”。

还是我错过了什么?

于 2015-09-04T12:44:38.670 回答