在cppreference中写了:
“If conversion of expression to new-type involves lvalue-to-rvalue, array-to-pointer, or function-to-pointer conversion, it can be performed explicitly by static_cast.”
这说明我们可以使用static_cast将左值转换为右值,可能你会想到std::move,这不也是将左值转换为右值嘛,这俩有什么区别?
这说明,因为我们的std::move 是用模板实现的,所以使用起来比static_cast要方便得多。
下面我们来看看`std::remove`的内部实现:
可以看见,首先,函数参数是T&&类型,这样通过引用折叠就可以匹配任意左值或者右值。
然后用remove_reference将T的所有引用全部脱掉,再加上&&,这样不管T是什么类型就都变成了右值引用类型,然后用static_cast将 t 转换为我们的右值引用。
也就是说,std::move的功能是使用static_cast将T,T&,T&&全都显式转换为T&&。
扫描二维码关注公众号,回复:
16847399 查看本文章
事实上,谈到static_cast, 我们不得不再提一嘴其转换的不安全性,
参考资料:
(37条消息) C++11新特性(66)- 用static_cast将左值转换为右值_面向对象思考的博客-CSDN博客 C++显式转换(1)-static_cast (qq.com)