首页 > 试题广场 >

c++11中提供了lambda特征,语法为 [=] (int

[不定项选择题]
c++11中提供了lambda特征,语法为
[=] (int x) mutable throw() -> int {
    // 函數內容
    int n = x + y;
    return n;
}
请问以下正确的是()
  • lambda常用于封装传给算法的数行简短代码,或是用于解决重复代码的问题
  • []表示不捕获任何外部变量,[=]表示通过拷贝捕获所有外部变量
  • (int x)表示此lambda需要传入一个int参数
  • lambda在c++14后开始可以支持泛型

lambda的定义和使用是在同一个地方的,对于接受函数指针或函数符的函数,可使用匿名函数定义(lambda)作为其参数,即可封装传递给算法的数行简短代码;

lambad可访问作用域内的任何动态变量;要捕获要使用的变量,可将其名称放到中括号内,只指定变量名,如[z],将按值访问变量,前加&,按引用访问,[&]访问所有引用变量,[=]能按值访问所有动态变量,也可混合使用。[ ]仅表示lambda引导符;

bool f3(int x){return x%3==0;}对应的lambda为   [ ] (int x) {return x%3==0;}  使用[ ]代替了函数名,没有声明返回类型,返回类型相当于使用decltyp根据返回值自动推断,如果lambda不包含返回语句,推断出的返回语句为void并且仅当表达式完全由一条返回值语句构成时,自动推断才有效,否则要新增返回类型后置语法:[ ] (double x) ->double {int y=x; return x-y;}


发表于 2018-11-02 21:52:05 回复(0)
B 选项明显不对啊, [=] 是以拷贝的形式,捕获外部闭合作用域的变量.
参考: https://en.cppreference.com/w/cpp/language/lambda
中的

ClosureType::Captures一节

发表于 2021-02-23 18:38:34 回复(0)
对于选项A中的后半句,
lambda常用于封装传给算法的数行简短代码,或是用于解决重复代码的问题
lambda表达式本质上是inline函数,可以通过一些方式来复用,见参考以下其他人的链接https://blog.csdn.net/qq_39885372/article/details/103893951
发表于 2023-03-14 10:41:16 回复(0)
lambda不是Java中的吗?
发表于 2021-01-23 21:42:08 回复(2)
表示一脸懵逼
发表于 2023-11-14 23:30:57 回复(0)
为什么可以用于解决重复代码的问题?又没有复用
编辑于 2021-04-28 13:55:44 回复(1)
[=] 父作用范围的所有变量以传值方式(只读),传递到匿名函数中(包括this)
发表于 2021-03-22 10:04:16 回复(0)