C 11构造函数参数:std ::移动和值或std :: forward and rvalue参考
C++11 constructor argument: std::move and value or std::forward and rvalue reference
应该首选以下两个中的哪一个?
struct X {
Y data_;
explicit X(Y&& data): data_(std::forward<Y>(data)) {}
};
vs
struct X {
Y data_;
explicit X(Y data): data_(std::move(data)) {}
};
两个变体在功能上有所不同。以下陈述适用于第二个陈述 - 但对第一个陈述不行:
Y y;
X x(y);
如果您正在寻找相同的功能,则两个变体应该如下:
struct X
{
Y data_;
explicit X(const Y& data) : data_(data) { }
explicit X(Y&& data) : data_(std::move(data)) { }
};
struct X
{
Y data_;
explicit X(Y data) : data_(std::move(data)) { }
};
第一个变体保存一个移动操作,而第二个变体则较少写。因此,答案是:使用后者,只要您没有理由优化性能。
相关文章:
- 完美前进使用 std::forward vs RefRefCast
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?
- "std::forward"和"std::move"真的不生成代码吗?
- 在C++中使用 std::forward 的多个参数
- 如何使用 std::forward 精确地评估参数包的扩展?
- 如何通过通用引用或std::forward将这三个c++模板函数合并为一个
- 自 C++11 年以来对 std::forward 实施的理解
- 当将参数包传递给另一个可变参数模板函数时,我是否必须使用 std::forward
- 为什么要在概念中使用std::forward
- 寻求对std::forward的澄清
- 为什么 std::forward 将左值和右值转换为右值引用?
- std::forward 如何推断出"_Ty"的类型?
- std::function operator() 和 std::forward 中发生了什么?
- How to std::forward( *this )
- 在哪些情况下,从 std::forward 分配比从 std::move 分配更可取?为什么
- 如何在varadic/template类构造函数中正确使用std::forward
- 包含 std::forward 会产生错误,但其省略会编译.为什么
- Returning std::make_pair with std::forward
- C 11构造函数参数:std ::移动和值或std :: forward and rvalue参考
- std::forward and operator()