c – 我使用std :: forward还是std :: move here?

假设我有
template<class T>
struct NodeBase
{
    T value;
    NodeBase(T &&value)
        : value(value) { }
};

我从它继承:

template<class T>
struct Node : public NodeBase<T>
{
    Node(T &&value)
        : NodeBase( WHAT_GOES_HERE (value)) { }
};

WHAT_GOES_HERE应该是std :: move或std :: forward< T>?为什么?

解决方法

由于在Node< T>的构造函数的实现中,T是否是普通类型(即不是参考)或引用是未知的,
std::forward<T>(value)

适合.

只要不知道T&&&&&&绑定到rvalue或lvalue.在这种情况下,因为在构造函数中,我们不知道T&&相当于U&&对于某些普通型U,或等同于U& &安培;&安培;.

在使用std :: forward或在不同时间确定的函数调用(例如在您的示例中,在实例化Node模板时确定T的情况下)推导T是否无关紧要.

std :: forward< T>(value)将以与调用者直接调用基类构造函数相同的方式调用继承的构造函数.也就是说,当value是一个左值时,它会将它称为一个左值,当值是一个右值时,它将被称为右值.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...