你怎么称呼带有右值引用参数的构造函数
What do you call a constructor with an rvalue reference parameter?
类 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
内部数据的辅助操作发生,或者其他任何取决于构造函数实现的内容。
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 具有常量引用参数的函数模板专用化
- C++:常量引用参数
- 字符串引用参数的效率C++
- 通过非常量引用参数修改常量引用参数
- 如何将指针变量作为引用参数传递?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 移动类的成员作为常量引用参数传递
- C++带有适用于左值和右值的引用参数的函数
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 委托构造函数和引用参数
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何强制函数仅接受左值引用参数
- 模板引用参数推断失败C++
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用