你用rvalue引用参数称为构造函数是什么?

时间:2016-02-12 14:25:00

标签: c++ c++11

  

T类的移动构造函数是非模板构造函数,其第一个参数是T&&,const T&&,volatile T&&和const volatile T&&,并且没有其他参数参数或其余参数都有默认值。

您认为对其他类型进行右值引用的构造函数是什么:

#include <string>
#include <vector>

struct Bar
{
    std::string bs;
    std::vector<char> bv;

};

struct Foo {
    std::string fs;
    std::vector<char> fv;

    Foo(Bar && b)
    : fs(std::move(b.bs))
    , fv(std::move(b.bv))
    {}
};

1 个答案:

答案 0 :(得分:3)

你称之为“构造函数”。

所有类型的函数都可以对类型进行右值引用,就像它们可以使用左值引用,值等一样。当编译器/语言需要特殊处理时,它们只获得特殊名称。并且编译器不会将此构造函数与采用rvalue的任何其他函数区别开来。

虽然一般来说,这样一个构造函数的含义从它给出的Bar移动。实际上,您永远不应该使用不移动(或转发)的右值参考参数。是否将Bar移动到自身,或者移动是作为创建Foo的内部数据的辅助操作发生的,或者是构造函数实现的其他内容。