在C ++中[=](...){...}的含义是什么?

时间:2013-02-27 08:31:30

标签: c++ c++11 lambda

这句话有什么影响:

std::replace_if(ln.begin(),ln.end(),[=](int c){return c=='\n'||c==' ';},0);

具体来说,我想知道:

的含义是什么
[=](int c){return c=='\n'||c==' ';}

这个定义的语法在哪里?

3 个答案:

答案 0 :(得分:2)

  

[=](int c){return c =='\ n'|| c =='';}

是一个lambda表达式,用于创建未命名的函数对象。它可以用一个参数调用并返回一个布尔值。方括号是所谓的“lambda导入器”,其中包含所谓的“捕获子句”。 capture-clause告诉编译器lambda对象如何捕获周围的局部变量。

  

std :: replace_if(ln.begin(),ln.end(),[=](int c){return c =='\ n'|| c =='';},0); < / p>

replace_if为序列,仿函数(更具体地说:谓词)和其他一些值采用两个迭代器。它遍历名为ln的序列的元素,如果给定的谓词(lambda表达式)为该元素返回true,则将每个元素替换为0。

因此,基本上,这行代码将使用空终止符替换ln中的每个空格和换行符。

答案 1 :(得分:1)

这是一个lambda函数。一个没有名称且在代码中内联定义的函数。它已被C ++ 11标准添加到C ++中。所以,这是相对较新的。

您可以阅读here

答案 2 :(得分:1)

这是一个lambda。如果cln,它会将容器0中的整数c == '\n'替换为c == ' '。由于容器似乎包含字符,因此基本上可以说它用空终止字符替换空格和换行符。

相关问题