我目前正在学习 lambda 函数的工作原理,因此尝试将数组传递给 Lambda 函数,我想将其打印出来。我的问题是,我不明白如何将数组传递到函数中。问题似乎根源于数组传递给 lambda 函数时的转换。这是该函数的当前状态:
auto print_array = [](int &array, int i) -> int {
//print out array
return 0;
}(&actual_array, actual_i);
非常感谢您的帮助!
最佳答案
您不能按值传递数组,并且传递指针的语法都是错误的。
实际上,传递指针或引用到数组很容易。使用泛型 lambda,您可以忽略维度是类型的一部分这一事实,只需简单地编写:
#include <iostream>
int main()
{
int actual_array[5] = {7,8,9,2,1};
const int actual_i = 3;
auto print_array = [](auto& ar, int i) {
std::cout << ar[i] << '\n';
};
print_array(actual_array, actual_i);
}
在此示例中,您调用的 print_array
实例化接受隐藏在 auto&
后面的 int(&)[5]
。
如果由于某种原因您无法遵守通用 lambda(基本上是一个模板),那么就采用老方法:
#include <iostream>
int main()
{
int actual_array[5] = {7,8,9,2,1};
const int actual_i = 3;
auto print_array = [](const int* ar, int i) {
std::cout << ar[i] << '\n';
};
print_array(&actual_array[0], actual_i);
}
这些都不是特定于 lambda 的。对于任何函数都是一样的。
关于c++ - 将数组传递给 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52279897/