C++ 类型转换
隐式转换
随便举几个例子。。。
1 | int a = 3.14; // a = 3 |
显示转换
C 样式的强制类型转换
1 | (int) x; |
建议 使用 C++ 强制转换运算符,它们更加类型安全,并且更加明确地表达编程目的
static_cast
static_cast
,用于仅在编译时检查的强制转换。
如果编译器检测到尝试在完全不兼容的类型之间强制转换,static_cast
将返回错误。还可以使用它在指向基对象的指针和指向派生对象的指针之间强制转换,但编译器无法总是判断出此类转换在运行时是否安全
1 | double d = 1.58947; |
对于编译器不能完成自动转换的,static_cast
就能帮忙完成转换
1 | void* p = &d; // ok: address of any nonconst object can be stored in a void* |
const_cast
将 const
转换成非 const
,只能改变 low-level
const
1 | const char *pc; |
dynamic_cast
用于从指向基对象的指针到指向派生对象的指针的、安全且经过运行时检查的强制转换
dynamic_cast
在向下转换方面比 static_cast
更安全,但运行时检查会产生一些开销
1 | Base* b = new Base(); |
reinterpret_cast
此强制转换运算符不像其他运算符一样常用,并且不能保证可将其移植到其它编译器。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.