我正在寻找std::forward
,发现了两个链接,它们的描述可以有不同的解释。
cplusplus.com:如果arg不是左值*引用***,则返回arg的右值引用。
cppreference.com:将左值转发为左值或右值,具体取决于T
我想区别在于引用**。
你能告诉我哪个解释是正确的吗?谢谢。
找到描述并比较
我正在寻找std::forward
,发现了两个链接,它们的描述可以有不同的解释。
cplusplus.com:如果arg不是左值*引用***,则返回arg的右值引用。
cppreference.com:将左值转发为左值或右值,具体取决于T
我想区别在于引用**。
你能告诉我哪个解释是正确的吗?谢谢。
找到描述并比较
1条答案
按热度按时间ffx8fchx1#
cppreference是正确的,而cplusplus是错误的
来自标准§forward
is_lvalue_reference_v<T>
为false
。static_cast<T&&>(t)
。注解
T
始终显式指定,它从不从函数参数t
(或arg
)推导来自cplusplus
如果arg不是左值引用,则返回对arg的右值引用。
如果arg是左值引用,则函数返回arg而不修改其类型。
这是不正确的
T
是左值引用类型,则右值(第一个)重载应该导致错误T
是右值(引用类型),则左值(第二个)重载应返回右值从cppreference开始
将左值转发为左值或右值,具体取决于T
将右值作为右值转发,并禁止将右值作为左值转发
这是正确的。