优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++类型转换(C++类型转换符号)

nanyue 2024-08-10 18:36:25 技术文章 16 ℃

C++类型转换

1. 隐式类型转换

char c = 'A';

int i = c; //隐式类型转换

int foo(int n) {

return c;//隐式类型转换

}

int main(void){

foo(c); //隐式类型转换

}

2.显示类型转换

2.1 C 语言显示类型转换(强制类型转换)

int a = 0xE0200080;

int *p = (int *)a;

char c;

int i = (int)c; //C 风格的强制转换

int i = int(c); //C++风格的强制转换

2.2 C++语言显示类型转换

兼容 C 语言类型转换的同时增加了四种操作符的形式。

(1) 静态类型转换

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

主要用于将 void* 转化为其它类型的指针

int a;

void* pv = &a;

int* pi = static_cast<int*>(pv); //ok

double* pv = static_cast<double*>(pi); //error

A 类型 ==> B 类型可以隐式转换

B 类型 ==> A 类型可以静态转换

(2) 动态类型转换

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

主要用于将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。

(3) 常量类型转换

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

主要用于去除指针或引用的常属性。

const int a = 10;

const int* p = &a;

*p = 20; //error

int* p2 = const_cast<int*>(p);

*p2 = 20; //ok

const int& r = a;

r = 30; //error

int& r2 = const_cast<int&>(r);

r2 = 30; //ok

(4) 重解释类型转换

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

A.任意类型的指针或引用之间进行转换

B.在指针和整型数之间的转换

int a;

int* pa = &a;

double* pd = reinterpret_cast<double*>(pa);

=============

小结:从C 到 C++ 的一些建议

1 慎用宏

#define PAI 3.14

==>

const double PAI = 3.14

#define ERROR 0

#define SUCCESS 1

==>

enum STATE{ERROR,SUCCESS}

#define max(a,b)((a)>(b)?(a):(b))

==>

inline int max(int a,int b){

return a > b ? a:b;

}

2 变量随用随声明同时初始化

3 尽量使用 new/delete 取代 malloc/free

4 少用 void*,指针计算、联合体和强制类型转换

5 少用 c 风格的 char*,多用 string 表示字符串

Tags:

最近发表
标签列表