【C++】听说了吗,C++引入了四种强制类型转换

目录
- 一、类型转换
- 1、C语言中的类型转换
- 2、C++中的类型转换
- 3、C语言类型转换的缺陷
- 4、C++中的四种强制类型转换
- 4.1 static_cast
- 4.2 reinterpret_cast
- 4.3 const_cast
- 4.4 dynamic_cast
一、类型转换
1、C语言中的类型转换
如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与
接收返回值类型不一致时,就需要发生类型转化,转换的前提是类型之间有一定的关联。
- 隐式类型转换:编译器自动进行,比如整形家族(int、char、unsigned int)/ 整型和浮点数
- 强制类型转换:我们自己处理,比如整形和指针、指针之间
int main() { int i = 1; // 隐式类型转换 double d = i; int* p = &i; // 显示的强制类型转换 int address = (int)p; return 0; }
2、C++中的类型转换
上面举的例子都是内置类型之间,而内置类型和自定义类型之间、自定义类型和自定义类型之间都是可以通过一定的方式互相转换的。
| 内置类型和自定义类型之间:
在前面的学习中我们经常说:单参数构造函数支持隐式类型转换,多参数也可以通过加{}进行隐式类型转换。
class A { public: A(int a) :_a1(a) ,_a2(a) {} A(int a1, int a2) :_a1(a1) ,_a2(a2) {} private: int _a1; int _a2; }; int main() { string s("Are you ok?");//隐式类型转换 A a1(1);//借助构造函数完成类型转换 A a2({ 1, 2 }); return 0; }
- C++支持内置类型隐式类型转换为类类型对象,需要有相关内置类型为参数的构造函数
- 构造函数前加explicit就不再支持隐式类型转换(但是还可以强转)
而自定义类型转换为内置类型需要通过下面这个函数:
operator int() { //... }
- 这个函数没有返回类型,但是有返回值
- 函数前加explicit就不再支持隐式类型转换(但是还可以强转)
class A { public: A(int a) :_a1(a) ,_a2(a) {} A(int a1, int a2) :_a1(a1) ,_a2(a2) {} operator int() { return _a1 + _a2; } private: int _a1; int _a2; }; int main() { string s("Are you ok?");//隐式类型转换 A a1(1);//借助构造函数完成类型转换 A a2({ 1, 2 }); int x = a1; int y = a2; cout public: A(int a) :_a1(a) ,_a2(a) {} A(int a1, int a2) :_a1(a1) ,_a2(a2) {} operator int() { return _a1 + _a2; } int get() const { return _a1 + _a2; } private: int _a1; int _a2; }; class B { public: B(int b) :_b(b) {} B(const A& aa) :_b(aa.get()) {} private: int _b; }; int main() { A aa(1); B bb(2); bb = aa;//这里走了B的拷贝构造 return 0; } } //... double d = 3.14; int a = static_cast double d = 3.14; int a = static_cast const int a = 2; int* p = const_cast public: virtual void f() {} }; class B : public A {}; void fun(A* pa) { // dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回 B* pb1 = static_cast A a; B b; fun(&a); fun(&b); return 0; }
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。