代码之家  ›  专栏  ›  技术社区  ›  user99999991

是否有必要使用rvalue引用重复调用move?

  •  1
  • user99999991  · 技术社区  · 6 年前
    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() move() ? 你已经有了rvalue引用,那么它在有vs没有的行中有什么不同吗?

    我明白在酒吧里 operator= 这是必要的,因为从技术上讲 m_Val 而不是 _other

    注意:最初,我错误地将rvalue引用称为rvalue参数。我很抱歉。我已经纠正了这一点,使问题更容易找到并变得更清楚。

    1 回复  |  直到 6 年前
        1
  •  12
  •   NathanOliver    6 年前

    给我打电话 move 在里面 main() 要调用rvalue参数方法,是否有必要在A&B&C行中重复对 move()

    对。你所说的 参数rvalue 移动 将它转换回一个rvalue,以便它被移动,而不是被复制。记得, 如果对象有名称,则为左值 .