我将 lambda 传递给一个接受它作为 r 值引用的函数。
如果我的 lambda 是在函数调用本身中定义的,我真的不在乎它以后会发生什么。
但是,如果我的 lambda 是一个变量(比如我想多次使用它),我确实想知道它没有被移出。
有没有办法知道它是否会被移出,使其在呼叫返回后相应地无法使用或可用?
编辑:
澄清一下,lambda 没有捕获任何东西。我关心的是函子本身:auto fn = [](int a){ return a; };
让我更难。我将函子作为右值传递:std::move(fn)
std::move 只是一个演员表。它不会移动任何东西,但被调用者中的右值参数现在绑定到正确的右值。
问题是,fn
保证会被感动吗?能保证不动吗?有任何保证吗?我可以让它以这种方式或那种方式运行,还是由被调用者决定?
我想知道,因为我想知道我可以fn
作为函数参数传递两次。
编辑#2:
让我们再看一个案例。我必须用容器调用一个函数。矢量、地图或其他任何东西。函数签名说&&
。我可以用 std move 或 std forward 包装我的容器,以将右值 ref 放入被调用者。这真的是一回事,因为他们都是美化的演员。
现在,假设我使用了标准转发,因为我真的很喜欢我的容器不会去任何地方。
我可以很容易地看到被调用者没有意识到我的意图,并在调用后移动我的容器使其无效(内脏)。这是语言缺陷还是我错过了什么?