函数g ++ 6.2的自动类型推导

时间:2017-01-12 15:30:14

标签: c++ g++ c++14

我正在尝试使用现代C ++'auto',并找到了一个产生错误的简单示例,我无法理解原因:

的main.cpp

// error: use of ‘auto test(int)’ before deduction of ‘auto’ int i = test(5);
int i = test(5);

test.h

auto test(int i);

TEST.CPP

auto test(int i) {
  if (i == 1)
    return i;               // return type deduced as int
  else
    return Correct(i-1)+i;  // ok to call it now
}

但如果我使用' - >'指定类型代码构建并运行良好。例如:

auto test(int i) -> int;

g ++ 6.2是编译器的现代版本,我想知道为什么我必须使用' - > INT”。感谢您的建议。

1 个答案:

答案 0 :(得分:1)

返回类型扣除根本无法用于声明。编译器使用定义(实现)通过检查函数实际返回的内容来推断类型。在一个声明中,它不可能这样做,因此当你调用函数时编译将失败,因为还没有推断出的返回类型。

使用尾随返回类型时,显式指定返回类型。在你的情况下,它与使用旧的“正常”方式声明返回类型没有什么不同。