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));
}
Предположим, что вы вызываете move
в main()
для вызова эталонных методов rvalue, необходимо ли в строках A & B и C повторить дополнительный вызов move()
?У вас уже есть ссылка на rvalue, так что он делает что-то другое в этих строках с vs без?
Я понимаю, что в баре operator=
это необходимо, потому что вы технически перемещаете m_Val
вместо _other
само по себе правильно?
Примечание. Первоначально я неправильно называл ссылки на rvalue параметрами rvalue.Мои извенения.Я исправил это, чтобы облегчить поиск и прояснение вопроса.