【发布时间】:2016-06-09 17:47:48
【问题描述】:
移动语义的想法是,您可以从另一个临时对象(由右值引用引用)中获取所有内容,并将“所有内容”存储在您的对象中。这有助于避免在单一构造事物就足够的情况下进行深度复制——因此您在右值对象中构造事物,然后将其移动到长期存在的对象中。
为什么 C++ 不允许将左值对象绑定到右值引用?两者都允许我更改引用的对象,因此在访问引用对象的内部方面对我没有区别。
我能猜到的唯一原因是函数重载歧义问题。
【问题讨论】:
-
你在问为什么不能有
void foo(vector & bar) {} foo(create temp vector here);? -
你知道
std::move吗? -
@NathanOliver OP 提出了相反的要求 —
void foo(vector&& bar) {} foo(already existing vector);;-)
标签: c++ c++11 move-semantics rvalue-reference