处理Valarrays

问题描述 投票:0回答:1

感谢您的事先关注。

所以我正在从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;
}

谢谢!

c++ capture valarray
1个回答
0
投票

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

少捕获的lambda可以转换为指向函数的指针,就像std::valarray<T>::apply函数需要的那样。但是,如果您在lambda中使用捕获,那么就不可能了。

© www.soinside.com 2019 - 2024. All rights reserved.