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

c – 我使用std :: forward还是std :: move here?,第1张

概述假设我有: template<class T>struct NodeBase{ T value; NodeBase(T &&value) : value(value) { }}; 我从它继承: template<class T>struct Node : public NodeBase<T>{ Node(T &&value) : N 假设我有:
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 – 我使用std :: forward还是std :: move here?全部内容,希望文章能够帮你解决c – 我使用std :: forward还是std :: move here?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1252181.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存