为什么我不能在递归 lambda 函数中使用 auto
Why can I not use auto in a recursive lambda function?
这是我mergeSort
方法中的代码,
std::function<void(std::vector<T>*)> mergeSortRange = [&](std::vector<T>* array) -> void {
int length = (int) array->size();
if (length < 2)
return;
std::vector<T>* leftArr = new std::vector<T>(array->begin(), array->begin() + length / 2);
std::vector<T>* rightArr = new std::vector<T>(array->begin() + length / 2, array->end());
mergeSortRange(leftArr);
mergeSortRange(rightArr);
mergeTwoSortedArrrays(leftArr, rightArr, array);
delete leftArr;
delete rightArr;
};
我本可以将第一行替换为:
auto mergeSortRange = [&](std::vector<T>* array) -> void
,我希望它能正常工作(请原谅我的无知(。
但相反,编译器抱怨说:
用"auto"声明的变量"mergeSortRange"不能出现在其 自己的初始值设定项。
我已经指定了参数和返回类型。有人可以对此有所了解吗?
你的程序格式不正确,因为正如Riad所说,你试图在推导类型之前调用函数:
dcl.spec.auto/10 如果需要具有未推断占位符类型的实体的类型来确定表达式的类型,则程序格式不正确。但是,一旦在函数中看到未丢弃的返回语句,从该语句推导出的返回类型就可以用于函数的其余部分,包括其他返回语句。
相关文章:
- 将函数参数类型声明为 auto
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 返回"auto"的函数在定义之前不能使用
- 警告:函数使用不带尾随返回类型的'auto'类型说明符
- 为什么我不能在递归 lambda 函数中使用 auto
- 错误:使用 auto 调用隐式删除的 unique_ptr 复制构造函数
- C++:在原型中声明"auto"函数返回类型仍然会导致在扣除错误之前使用"auto&quo
- 从函数返回引用是否会导致在使用'auto'时创建新的临时对象?
- C++14 'auto'能够获取函数返回类型,我们还需要 std::result_of<> 吗?
- 为什么在auto和template函数的情况下,类型都没有推导为"const"类型
- auto f = bind(dist<>,gen) 在成员声明C++失败。未被识别为函数
- 没有声明和初始化的类似闭包的函数(即没有'auto f = make_closure();')
- 使用 auto 推导的 lambda 中成员函数的模板
- 如何用'auto'单词推导出哪种类型的参数编写函数?
- 使用新的 C++11 语法的 auto 进行函数声明,但使用 auto&并且没有 ->
- C++构造函数中的'new auto'
- lambda 函数的类型,使用 auto
- lambda 中的跨平台"auto"关键字用法:integral_constant作为函数参数
- 为什么 auto 关键字不能与指向函数的指针的初始化列表一起使用?
- 错误:auto函数的模板声明