> 文章列表 > 浅析static_cast将左值转为右值

浅析static_cast将左值转为右值

浅析static_cast将左值转为右值

在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&&。

事实上,谈到static_cast, 我们不得不再提一嘴其转换的不安全性,

参考资料:

(37条消息) C++11新特性(66)- 用static_cast将左值转换为右值_面向对象思考的博客-CSDN博客 C++显式转换(1)-static_cast (qq.com)

https://en.cppreference.com/w/cpp/language/static_cast