【博客42】对 "const_cast" 用途的思考

内容: 今天记录下c++的四种转换中的const_cast类型。const_cast主要用来移除const属性的,而且是用来移除底层const的属性。那么出于什么意图去使用const_cast和如何正确使用它是个值得思考的问题。

错误使用的情况一:
【博客42】对 "const_cast" 用途的思考
结果:
【博客42】对 "const_cast" 用途的思考
分析:没有达到你的目的,原因是你的初衷一开始就错了,const_cast的目的并不是为了让你去修改一个本身被定义为const的值。所以这种修改是不会成功的,是一种错误用法。

错误使用情况二:
【博客42】对 "const_cast" 用途的思考
分析:这时候p1并没有变为你想要的类型,没有去掉它的const,所以不成功。下面贴出使用const_cast的正确使用以及使用的目的,上面的错误用法就是我以前认为的这么用的,真的是天真了哈哈。

正确使用const_cast的方法一:
【博客42】对 "const_cast" 用途的思考
【博客42】对 "const_cast" 用途的思考
分析:当我们拿到一个const类型的指针,但是我们真的想要去修改它指向的值,那么这时候我们可以使用const_cast来完成。通过定义一个新指针,然后用const_cast来转换,之后通过操作新指针可以修改。

正确使用const_cast的方法二:
【博客42】对 "const_cast" 用途的思考
【博客42】对 "const_cast" 用途的思考
分析:当我们的函数的形参是非const,但是你的参数是const,这时候你就得使用const_cast来转换,以使得参数能够传进去。(当然不是说你的函数都定义成非const,然后等着强转实参才能传进去,当形参为指针或者引用的时候,应该是如果不修改传进去的值,那么就需要定义为const,如果是值传递,就无所谓了,反正修改的是副本,不过为了保险,还是保持上面一样的做法,因为你也要照顾下其他人看你函数声明的时候,根据你的形参能够知道你函数会不会修改传进去的值)

总结:const_cast的目的并不是为了让你去修改一个本身被定义为const的值,因为这样做的后果是无法预期的。const_cast的目的是修改一些指针/引用的权限,如果我们原本无法通过这些指针/引用修改某块内存的值,现在你可以了。

大三学生一枚,文章均非抄袭或者模仿,均为原创,仅代表个人观点,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈。