你怎么称呼带有右值引用参数的构造函数

What do you call a constructor with an rvalue reference parameter?

本文关键字:引用 参数 构造函数      更新时间:2023-10-16
类 T 的移动构造函数是非模板构造函数,其第一个参数是 T&&、常量 T&&、易失性 T&

&或常量易失性 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))
    {}
};

你称之为"构造函数"。

所有类型的函数都可以采用对类型的右值引用,就像它们可以接受左值引用、值等一样。只有当编译器/语言需要特殊对待它们时,它们才会获得特殊名称。编译器将此构造函数与采用右值的任何其他函数的处理方式没有任何不同。

尽管一般来说,这种构造函数的含义是它将从给定的Bar移动。实际上,您永远不应该采用不移动(或向前)的右值引用参数。无论是将Bar移动到自身,还是作为创建Foo内部数据的辅助操作发生,或者其他任何取决于构造函数实现的内容。