【发布时间】:2017-06-01 12:38:07
【问题描述】:
我做了简单的测试来更好地理解移动语义。输出结果出乎我的意料。波纹管是我的测试功能:
template<class T>
void test(T&& v)
{
v++;
}
void main()
{
int v = 1;
test(std::move(v));
std::cout << "Output:" << v << std::endl;
}
我的期望是: 输出:1 但真正的结果是: 输出:2
我的想法如下 - 我使用 std::move(v),结果我转换为“右值”并且测试函数将使用时间变量。因此结果应该是输出:1。 我的结论有什么问题?
【问题讨论】:
-
void main 不符合 c++ 标准。
-
std::move的名字选错了,这可能是让你感到困惑的地方。它实际上并没有移动任何东西。它只是将左值转换为右值,从而可能进行移动。
标签: c++ std move-semantics rvalue