struct Bar
{
Bar(std::string&& val)
: m_Val(std::move(val)) {} // A
Bar& operator=(Bar&& _other) { m_Val = std::move(_other.m_Val); }
std::string m_Val;
}
struct Foo
{
void Func1(Bar&& param)
{
Func2(std::move(param)) // B
}
void Func2(Bar&& param)
{
m_Bar = std::move(param); // C
}
Bar m_Bar;
};
void main()
{
Foo f;
std::string s = "some str";
Bar b(std::move(s));
f.Func1(std::move(b));
}
Run Code Online (Sandbox Code Playgroud)
给你调用move在main()调用右值的参考方法,是有必要的线A&B&C重复一个额外的呼叫move()?你已经有rvalue引用了,所以它在vs那些行中做了什么不同吗?
我理解在Bar中operator=它是必要的,因为你在技术上移动m_Val而不是_other本身正确吗?
注意:最初,我错误地将rvalue引用称为rvalue参数.我很抱歉.我已经纠正了这个问题,以便更容易找到问题并使其更清晰.
Nat*_*ica 12
给你调用
move在main()调用右值参数的方法,是有必要的线A&B&C重复一个额外的呼叫move()?
是.你称之为rvalue参数实际上是一个右值引用.就像左值引用一样,它是在使用它的范围内的左值.这意味着您需要使用move它将其强制转换为右值,以便它被移动而不是复制.请记住,如果对象具有名称,则它是左值.
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |