【发布时间】:2021-05-25 15:26:13
【问题描述】:
如果我有
std::function<int()> &&x = [] { return 1; };
auto lambda = [y = x(), x] {
return y * x();
};
lambda 内部的x 是什么类型:std::function<int()>、std::function<int()>& 或 std::function<int()>&&?如果是第一个,捕获的x 是由移动构造函数初始化还是由副本初始化(我需要[y = x(), x = std::move(x)] 来移动它)?
【问题讨论】:
-
看起来像来自强制编译器错误的
const std::function<int ()>- 实时 - godbolt.org/z/Pfh5z9K8G -
我错了还是实际上是
std::function<int()>&&? Wandbox. -
1.它将是
std::function<int()>。 2. 是的,你需要明确写x = std::move(x)。 -
@2b-t 在下面回答。
-
@songyuanyao 谢谢,我已经投了赞成票。玩弄一个简单的例子,我已经发现那里的
decltype实际上返回了本地variable,因为通过引用捕获变量不会做任何事情。非常感谢您的详细解释!