我正在尝试使用现代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”。感谢您的建议。
答案 0 :(得分:1)
返回类型扣除根本无法用于声明。编译器使用定义(实现)通过检查函数实际返回的内容来推断类型。在一个声明中,它不可能这样做,因此当你调用函数时编译将失败,因为还没有推断出的返回类型。
使用尾随返回类型时,显式指定返回类型。在你的情况下,它与使用旧的“正常”方式声明返回类型没有什么不同。