在 C++14 中推导“auto”之前使用“auto func(int)”

2024-03-12

我使用 GCC 编译了以下程序C++14.

#include <iostream>
using namespace std;

auto func(int i);

int main() 
{
    auto ret = func(5);
    return 0;
}

auto func(int i) 
{
  if (i == 1)
    return i;              
  else
    return func(i-1) + i;  
}

但是,我收到以下错误。

In function 'int main()': 8:16: error: use of 'auto func(int)' before
deduction of 'auto'
 auto ret = func(5);

那么,我在这里缺少什么?


This is [dcl.spec.auto/11] http://eel.is/c++draft/dcl.spec.auto#11:

如果需要具有未推导占位符类型的实体类型 为了确定表达式的类型,该程序是格式错误的。 一旦在函数中看到未丢弃的 return 语句, 但是,从该语句推导出的返回类型可以用于 函数的其余部分,包括其他返回语句。 [ 例子:

auto n = n;                     // error, n's type is unknown
auto f();
void g() { &f; }                // error, f's return type is unknown
auto sum(int i) {
  if (i == 1)
    return i;                   // sum's return type is int
  else
    return sum(i-1)+i;          // OK, sum's return type has been deduced
}

—《示例结束》]

将其翻译成英语:编译器需要知道返回类型,然后才能使用该函数。的情况下auto像这样使用,这通常是通过将定义移到使用点之前来实现的。如果您实际上不需要使用返回类型推导,则可以在声明中提供签名(包括返回类型),从而在使用后保留定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++14 中推导“auto”之前使用“auto func(int)” 的相关文章

随机推荐