Date
Dec. 22nd, 2024
 
2024年 11月 22日

Post: C++ Primer 008 : 类型转换

C++ Primer 008 : 类型转换

Published 12:05 May 23, 2013.

Created by @ezra. Categorized in #Programming, and tagged as #C/C++.

Source format: Markdown

Table of Content

本篇主要介绍C++ 中的类型转换。

类型转换分为隐式与显式两种情况,隐式指较小的数据类型转为较大的数据类型,编译器会自动进行操作,例如 int 转换为 long;显式则与隐式相反,因为可能造成数据丢失等情况因此必须在代码中写明才有效,所以也被称为强制类型转换。

char c = 'a';
int i = (int)c; // C 风格
int i = int(c); // C++ 风格

静态类型转换

目标类型 变量名 = static_cast<目标类型>(源类型变量);

在源类型和目标类型之间只要有一个方向可以做隐式类型转换,那么在两个方向上都可以使用静态类型转换,反之如果在两个方向上都不能做隐式类型转换,那么在两个方向上都不能做静态类型转换。

int* pi;
void* pv = pi;//pi -> pv 隐式类型转换
pi = pv; // void* -> int* 编译报错
pi = static_cast<int*>(pv);

常量类型转换

目标类型 变量名 = const_cast<目标类型>(源类型变量);

主要用于去除指针/引用上面的常属性。

重解释类型转换

目标类型 变量名 = reinterpret_cast<目标类型>(源变量);

主要用于任意指针类型之间的转换,以及指针和整型之间的转换。

动态类型转换

int n/*4个字节->2个short->4个char*/ = dynamic_cast<目标类型>(源类型变量);

主要用于具有多态特性的父子类指针/引用之间的转换。

Pinned Message
HOTODOGO
The Founder and CEO of Infeca Technology.
Developer, Designer, Blogger.
Big fan of Apple, Love of colour.
Feel free to contact me.
反曲点科技创始人和首席执行官。
开发、设计与写作皆为所长。
热爱苹果、钟情色彩。
随时恭候 垂询