处理 Valarrays
Processing Valarrays
提前感谢关注
所以我正在处理来自 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 中使用捕获,那么就不可能了。
提前感谢关注
所以我正在处理来自 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 中使用捕获,那么就不可能了。