处理瓦拉阵列

Processing Valarrays

本文关键字:阵列 处理      更新时间:2023-10-16

提前感谢您的关注。

所以我正在处理来自 STL 的 valarray,我对使用闭包捕获值感到好奇。

为什么我不能通过引用传递值。以以下代码为例:

#include <iostream>
#include <valarray>
#include <functional>

int main()
{
std::valarray<int>arr={1,2};
std::valarray<int>arr2;

arr2=arr.apply([](int a){return a+=2;}); 
/* arr2=arr.apply([&](int a){return a+=2;}); 
error: no matching for call to std::valarray<int>::apply(main()::<lambda(int)> */

for(int x: arr2){
std::cout<<x;
}
return 0;
}

谢谢!

与采用谓词或其他可调用对象形式的几乎任何其他标准库函数不同,std::valarray<T>::apply函数实际上只接受指向函数的实际指针,而不是使用模板来接受任何可调用的内容。

无捕获的 lambda 可以转换为指向函数的指针,就像apply函数需要的一样。但是,如果您在lambda中使用捕获,那么这不再可能。