相关疑难解决方法(0)

c ++ 11 lambdas捕获他们不使用的变量吗?

当我[=]用来表示我希望所有局部变量都被lambda中的值捕获时,是否会导致被复制的函数中的所有局部变量,或者只是lambda使用的所有局部变量?

所以,例如,如果我有:

vector<int> my_huge_vector(100000);
int my_measly_int;
some_function([=](int i){ return my_measly_int + i; });
Run Code Online (Sandbox Code Playgroud)

my_huge_vector会被复制,即使我不在lambda中使用它吗?

c++ lambda c++11

120
推荐指数
2
解决办法
2万
查看次数

如果我按价值捕获并且不使用它,我仍会得到一份副本吗?

我不想通过lambda中的值捕获shared_ptr,以确保对象的生命周期延伸到lambda函数被调用的点.

否则我实际上不需要shared_ptr.如果我做:

shared_ptr<..> sp;
sp->async_call( [sp](){} );
Run Code Online (Sandbox Code Playgroud)

即使身体没有引用它,sp仍然可以被复制吗?

c++ lambda c++11

10
推荐指数
1
解决办法
263
查看次数

强制C++ 11 lambda捕获变量

假设复制变量具有所需的副作用.我想声明一个复制变量但不使用该变量的lambda.这样做的最低要求是什么?

Copiable copyable;

auto lambda1 = [=](){};
auto lambda2 = [copyable](){};
auto lambda3 = [=](){ copyable; }
auto lambda4 = [=](){ volatile copy = copyable; }
Run Code Online (Sandbox Code Playgroud)

lambda1使用隐式捕获,并且由于正文没有提及copyable,我不相信它实际上是复制它.

lambda2使用显式捕获,似乎根据这个,它应该通过副本捕获.是否允许编译器删除副本?有关此问题的另一个讨论,请参阅

lambda3使用隐式捕获,但身体提到copyable.这是否构成了一种使用方式copyable

lambda4使用隐式捕获并强制另一个volatile副本.我确信这实际上会有效,但它的副本数量超过了最低限度.

激励案例:我需要在完成任意数量的lambda调用后运行清理,可能在不同的线程中.我可以通过使用一个std::shared_ptr运行清理的自定义删除器来实现这一点,并以某种方式将其传递给每个lambda.然后,当所有共享ptrs超出范围时,清理将运行.

编辑:lambda3并且lambda4错过了=隐式捕获.

c++ lambda c++11

7
推荐指数
1
解决办法
1329
查看次数

标签 统计

c++ ×3

c++11 ×3

lambda ×3