【发布时间】:2018-09-25 16:19:20
【问题描述】:
我有以下测试代码:
#include <iostream>
#include <string>
void printValue(std::string&& val)
{
std::cout << "Got value: " << val << "\n";
}
int main() {
std::string testValue = "Test Value";
auto lambda = [testValue = std::move(testValue)]() mutable
{
printValue(std::move(testValue));
};
lambda();
lambda();
lambda();
}
我得到了结果:
Got value: Test Value
Got value: Test Value
Got value: Test Value
这是一个有效的假设,即从 lambda 中移动已捕获的对象将始终具有将其移动到 lambda 中的初始状态,或者这只是对象处于“有效但未指定”的伪影状态”?
【问题讨论】:
-
std::move给予许可移动。它不做任何其他事情。收到这种“移动”值的客户可能会选择从中移动,也可能不会。在您的示例中,printValue选择不从val移动。
标签: c++ c++11 lambda c++14 move-semantics