std ::在非模板函数中向前
std::forward in non-template function
有一些具有rvalue参数的函数。还有其他功能也具有rvalue参数。第一个功能调用第二个功能:
void inner(int&& a)
{/* ... */}
void outer(int&& a)
{
inner(std::move(a));
}
我使用std::move
,因为我们使用std::move
将参数作为rvalue传递。但是我的同事说std::forward
在这里更合适,因为我们在这里转发(不移动)RVALUE参考:
void outer(int&& a)
{
inner(std::forward(a));
}
是真的吗?哪个变体更正确?
向前是有条件的移动。在这里使用它就像说您应该在if (true)
中包装语句。
前进的用法略有不同。它是这样使用的:
void outer(int&& a)
{
inner(std::forward<int>(a));
}
在非模板代码上,由于没有转发,转发确实令人困惑。
由于转发参考和参考折叠而存在转发。夺走那些,不再是转发魔术。
在您的情况下,您将收到RVALUE参考。移动它是正确的事情。
向前是有条件的移动,取决于您可能想要移动的变量的声明类型。如果该变量是LVALUE参考,则std::forward<T>(t)
不会移动它。
相关文章:
- 无法引用该函数" std:: variant <_Types...> operator =",因为此函数已被删除
- 错误:使用已删除的函数"std::unique_ptr<...>
- 我有模板功能.通过使用函数std::for_each,用这个容器中的最大数字替换每个正数
- 如何使用函数std::min()来计算最小值
- 删除了 g++ 在 linux 中basic_stringstream函数 std
- 如何在 c++ 中使用返回类型导出函数 std::map
- 错误:使用已删除的函数"std::atomic<_Tp>::atomic() [_Tp = node]"
- 使用 SFINAE 检查函数 std::to_string 是否存在类型
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误
- 为什么函数 std::basic_streambuf::setg() 需要非常量 agruments
- C++将已删除的函数 std::unique_ptr 与基类一起使用
- 奇怪的错误:当没有真正创建指针时,使用已删除的函数'std::unique_ptr<_Tp,_Dp>::unique_ptr
- 通过模板构造函数(std ::功能和迷你案例)将构造函数触发
- 错误:使用已删除的函数"std::atomic<_Tp>::atomic()
- 错误:使用已删除的函数std::basic_ofstream(OpenCV和C++11)
- 类成员容器迭代器在成员函数std::find中不兼容,但为什么不兼容呢
- 没有构造函数 std::istream_iterator 的实例
- 错误:没有与参数列表匹配的重载函数"std::make_shared"实例
- 错误:使用已删除的函数"std::thread::thread(const std::thread&)"
- 不能在没有对象的情况下调用成员函数 std::string class::function()