C++显式转换和C语言的强制类型转换之间的区别

C语言的强制类型转换的功能更通用,即它具有static_cast, const_cast和reinterpret_cast相似的行为。

但是,

  • static_cast只能应用于明确定义了的类型转换,并且不能用于底层const(lower const)的转换。

  • const_cast只能改变底层const

  • reinterpret_cast通常用于重新解释一个指针类型,使用需小心。

然而,C语言的强制类型转换没有细分的这么明显,它拥有了这三者的功能。

见代码:

int a = 0;
int *pa = &a; 
const int *cpa = &a; 

//static_cast<int*>(cpa);   // invalid static_cast from type ‘const int*’ to type ‘int*’
//static_cast<char*>(pa);   // invalid static_cast from type ‘int*’ to type ‘char*’

const_cast<int*>(cpa);      // OK

reinterpret_cast<char*>(pa);// OK

(int*)cpa;                  // OK
(char*)pa;                  // OK

return 0;

猜你喜欢

转载自www.cnblogs.com/demon90s/p/9094524.html