当前的 C++11 标准不支持在 lambda 表达式中移动捕获变量,例如
unique_ptr<int[]> msg(new int[1000000]);
async_op([&&msg] { // compile error : move capture is not supported
/* do something */
});
由于消息传递和唯一所有权在某些异步系统设计中具有一些关键作用,我认为移动语义应该被视为一流的语言语义。但是 lambda 不支持移动捕获。
当然,我知道使用移动捕获代理有一些解决方法——但我想知道为什么决定不将这个功能包含在 C++11 标准中,尽管它很重要。