我正在阅读有关std :: move的内容。基于很少的材料,我得出结论,std :: move只是一个将其参数类型转换为rvalue-reference的函数。
我还读到,rvalue-references可以与将其参数作为const-references的函数一起使用。这是有意义的,因为保证对象的内容不会改变。
为了验证这些想法,我用下面的一个类做了一个非常简单的实验。
我创建了一个对象 t1 并使用 std :: move 将其转换为 rvalue-reference 并尝试创建另一个对象< strong> t2 ,调用copy-constructor。
神秘的部分是即使我不提供move-constructor,它也适用于copy-constructor,我将其参数定义为非const引用。
但是,如果std :: move将 t1 的类型转换为rvalue-reference,编译器如何将其绑定到左值引用?
顺便说一句,我使用的是“Microsoft(R)Microsoft Visual Studio 2012版本11.0.50727.1”。
请你解释一下我在这里缺少什么?
非常感谢。
#include <iostream>
#include <algorithm>
using namespace std;
class Trace {
public:
Trace() {
}
// @1
Trace(Trace& t) {
cout << "trace::trace(&)" << endl;
}
// @2
Trace(Trace&& t) {
cout << "trace::trace(&&)" << endl;
}
};
int main(int argc, const char *argv[])
{
Trace t1;
// Calls @2 if it exists, otherwise calls @1
Trace t2(std::move(t1));
return 0;
}