C++11 自动调用移动构造函数
我有以下代码示例:C++11 自动调用移动构造函数,c++11,C++11,我有以下代码示例: void MyClass::Register2(std::string name, std::string email) { m_name = std::move(name); m_email = std::move(email); } void MyClass::Register1(std::string name) { Register2(std::move(name), "invalid_email"); } 我的问题是: 从Registe
void MyClass::Register2(std::string name, std::string email)
{
m_name = std::move(name);
m_email = std::move(email);
}
void MyClass::Register1(std::string name)
{
Register2(std::move(name), "invalid_email");
}
我的问题是:
void MyClass::Register2(std::string name, std::string email)
{
m_name <= name; // perform move
m_email <= email; // perform move
}
void MyClass::Register2(std::string name,std::string email)
{
m_名称
从Register1()调用Register2()时是否需要使用std::move
是的,因为name
是左值,您希望将其转换为右值
我需要在Register1()中调用std::move()吗
是的,原因与上述相同
如果问题2的答案是肯定的,是否可以由一名专门的操作员代替
这是可能的,但我不认为它已经被提出。而且,如果它被提出,我认为它不会被接受,因为它不会给std::move带来太多价值
对
对
没有
std::move
看起来像这样
模板
标准::删除\u引用\u t&&move(t&&value){
返回静态_cast(值);
}
它所做的只是将作为参数传递的内容强制转换为右值。这一步非常重要,因为即使传递右值,参数也始终是左值(因为它们有名称)。左值是不可移动的,因此如果不将它们强制转换为右值,移动机制将不会生效,它们将被简单地复制
运算符是函数,在这种情况下没有例外。没有提出特殊的移动运算符,而且这种情况极不可能出现,因为它会使标准变得更长、更复杂(编译器也会受到严重影响),从而可以节省几个字符