我将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前进因为我真的很喜欢我的容器不能去任何地方.
我很容易看到被叫方没有意识到我的意图,并且在通话结束后移动我的容器使其无效(内脏).这是语言缺陷还是我错过了什么?