小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/
目录
类型转换——前言
当说完这部分内容后,C++的基础语法已经基本上讲解完毕。你可以尝试找一些项目做一做,提高自己的编程水平,然后一边做项目一边学习剩下的课程。
前面已经讲解过隐式转换、static_cast
和dynamic_cast
,这部分教程将讲解C++类型转换中最后两个转换。
补充知识(了解即可)
C++尽量与C语言兼容,所以也可以使用C语言的强制转换,但是并不推荐使用。因为C++的类型转换有检测功能,使你的代码更安全,虽然关键字长了一点。。C语言的强制转换用法:int a = (int)12.7f;
。只需要在需要转换类型的值或者变量前面加上()
,()
里面是目标类型。
const_cast
基础示例
#include <iostream> // std::cout std::endl
int main(void)
{
int value = 1024;
const int &value_ref = value; // 引用, 不可改变value的值
const int *value_pointer = &value; // 指针, 不可改变value的值
auto r = const_cast<int &>(value_ref); // 将value_ref从const int &转换成int &
auto p = const_cast<int *>(value_pointer); // 将value_ref从const int *转换成int *
r = 666;
std::cout << value << std::endl;
*p = 233;
std::cout << value << std::endl;
return 0;
}
基础讲解
const_cast
可以将不可改变值的引用或者不可改变指向内存数据的指针,转换成可以改变值的引用或者可以改变指向内存数据的指针。但前提是:实际的变量的值是可以改变的。
注意未定义行为
基础示例
#include <iostream>
int main(void)
{
const int value = 1024;
const int &value_ref = value; // 引用, 不可改变value的值
const int *value_pointer = &value; // 指针, 不可改变value的值
auto r = const_cast<int &>(value_ref); // 将value_ref从const int &转换成int &
auto p = const_cast<int *>(value_pointer); // 将value_ref从const int *转换成int *
// r = 666; // 未定义行为
// *p = 233; // 未定义行为
return 0;
}
基础讲解
代码中的value
使用了const
修饰,它是不能改变的变量,这个时候使用const_cast
对value
进行操作将引发未定义行为。