Date
May. 19th, 2024
 
2024年 4月 12日

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
I'm looking for a SOFTWARE PROJECT DIRECTOR / SOFTWARE R&D DIRECTOR position in a fresh and dynamic company. I would like to gain the right experience and extend my skills while working in great teams and big projects.
Feel free to contact me.
For more information, please view online résumé or download PDF
本人正在寻求任职 软件项目经理 / 软件技术经理 岗位的机会, 希望加⼊某个新鲜⽽充满活⼒的公司。
如有意向请随时 与我联系
更多信息请 查阅在线简历下载 PDF