小编Bit*_*ler的帖子

我怎么知道作为r值传递的对象是否会被移动?

我将lambda传递给一个函数,该函数接受它作为r值引用.

如果我的lambda是在函数调用本身中定义的,那我以后真的不关心它会发生什么.
但是如果我的lambda是一个变量(假设我想多次使用它),我确实想知道它不是移动的.

是否有办法知道它是否会被移动 - 在呼叫返回后使其无法使用或相应可用?

编辑:

只是为了澄清,lambda没有捕获任何东西.我关心的是仿函数本身:auto fn = [](int a){ return a; };

让我更难.我将传递函数作为右值:std::move(fn)

std :: move只是一个演员.它不移动任何东西,但被调用者中的rvalue参数现在绑定到正确的右值.

问题是,fn保证会被感动吗?是否保证不被感动?有什么保证吗?我可以让它以这种方式或那种方式运行,还是由被调用者来做?

我想知道,因为我想知道我可以fn作为函数参数传递两次.

编辑#2:

我们来看另一个案例吧.我必须用容器调用一个函数.矢量,地图或其他任何东西.功能签名说&&.我可以使用std move或std向前包装我的容器以获得rvalue ref到被调用者.这真是一回事,因为他们都是美化的演员.

现在,让我们说我使用std前进因为我真的很喜欢我的容器不能去任何地方.

我很容易看到被叫方没有意识到我的意图,并且在通话结束后移动我的容器使其无效(内脏).这是语言缺陷还是我错过了什么?

c++ lambda move-semantics c++11 forwarding-reference

5
推荐指数
1
解决办法
212
查看次数