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;