当调用move构造函数时 我想知道在C++代码中何时调用构造函数。< /P>
这意味着,我知道当我调用当调用move构造函数时 我想知道在C++代码中何时调用构造函数。< /P>,c++,c++11,constructor,C++,C++11,Constructor,这意味着,我知道当我调用fooa(b)时,它是复制构造函数,所以我必须编写什么代码才能调用移动构造函数。移动构造函数只是另一个构造函数。如果有重载构造函数,就像重载任何其他函数一样,调用哪个构造函数取决于重载解析规则。也就是说,当您使用fooa()构造对象时,可能有多个可能的构造函数,需要选择一个 复制构造函数接受一个类型为constfoo&的参数。此左值引用类型将绑定到表示Foo对象的任何表达式。move构造函数接受一个Foo&类型的参数。此右值引用将仅绑定到可修改的右值。事实上,在传递可修改
fooa(b)
时,它是复制构造函数,所以我必须编写什么代码才能调用移动构造函数。移动构造函数只是另一个构造函数。如果有重载构造函数,就像重载任何其他函数一样,调用哪个构造函数取决于重载解析规则。也就是说,当您使用fooa()构造对象时代码>,可能有多个可能的构造函数,需要选择一个
复制构造函数接受一个类型为constfoo&
的参数。此左值引用类型将绑定到表示Foo
对象的任何表达式。move构造函数接受一个Foo&
类型的参数。此右值引用将仅绑定到可修改的右值。事实上,在传递可修改的右值的情况下,最好使用此重载
这意味着在fooa()
如果表达式
是可修改的右值,则将选择移动构造函数。否则将选择复制构造函数。可修改的右值通常在表示临时对象(例如,从函数返回的对象)时出现。还可以通过使用std::move
,例如fooa(std::move(b)),将表达式强制为右值表达式
一般来说,我们必须给出一个rvalue
引用参数来说明它。例如:
template<class T>
void swap(T& a, T& b)
{
T tmp = std::move(a);
a = std::move(b);
b = std::move(tmp);
}
模板
无效掉期(T&a、T&b)
{
T tmp=std::move(a);
a=标准::移动(b);
b=标准::移动(tmp);
}
move()
是一个标准库函数,返回对其参数的右值引用
move(x)
的意思是“给我一个对x的右值引用”。也就是说,std::move(x)
不移动任何东西,而是允许用户移动x
源代码:C++编程语言(B. Stroustrup)
答案将帮助你。在你的FooA(b)的例子中,<代码> b>代码>是一个命名对象,因此它不能是一个rValue.std::move(b)
在这里是必需的。@MichaelGazonda我把b
当作一个通用表达式,而不是专门的b
。我会说清楚的。