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

重载接受右值引用的类构造函数

  •  -2
  • bur  · 技术社区  · 6 年前

    class Foo
    {
        Foo(int &&a, int b, std::string s="");
        // does not compile because a is not an rvalue:
        // Foo(int &&a, std::string s) : Foo(a, 0, s) {}
        Foo(int &&a, std::string s) : Foo(std::move(a), 0, s) {} // move a
    }
    
    • 这通常是重载构造函数的有效方法吗?

    根据评论编辑

    澄清一下,我对移动语义是新手(也是一名业余程序员),我不确定这是否是处理这种情况的好方法。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Community CDub    4 年前

    这通常是重载构造函数的有效方法吗?

    通常,重载构造函数是有效的,即使是具有右值引用参数的构造函数也是如此。

    特别是,你的例子格式不正确。正如您在注释中指出的,示例无法编译。若要修复它,必须向委托给的构造函数传递一个右值。将右值引用变量转换为右值的正确方法是使用 std::move . 所以,你必须做的是你已经知道的:

    std::move(a) .