static_cast是C++中用于显式类型转换的关键字,适用于基本类型转换、继承体系中的指针转换、void*指针转换及自定义类型转换,语法为static_cast(表达式),相比C风格转换更安全清晰,但不能去除const属性或进行无继承关系的类指针转换。

在C++中,static_cast 是一种用于显式类型转换的关键字,它在编译时进行类型检查,适用于有明确定义的类型转换场景。与C风格的强制类型转换相比,static_cast 更安全、更清晰,能帮助程序员明确表达转换意图。
基本语法
使用 static_cast 的语法如下:
static_cast(表达式)例如:
int i = 10;double d = static_cast
常见使用场景
1. 基本数据类型之间的转换
static_cast 可用于数值类型之间的转换,如 int 到 double,float 到 int 等。
立即学习“C++免费学习笔记(深入)”;
double d = 3.14;int i = static_cast
注意:这种转换可能导致精度丢失,但编译器不会报错,需程序员自行确保合理性。
2. 指针类型的向上和向下转换(在继承体系中)
static_cast 可用于类层次结构中的指针或引用转换,但仅限于有继承关系的类型。
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
class Derived : public Base { };
Derived* pd = new Derived;
Base* pb = static_cast
也可以将基类指针“假设”为派生类指针(向下转换),但这种用法不安全,应优先使用 dynamic_cast 配合虚函数和RTTI。
Base* pb = new Base;Derived* pd = static_cast
3. void* 与其他指针类型的转换
可以将任意对象指针转换为 void*,反之亦然。
void* pv = static_cast
int* pi = static_cast
注意:从 void* 转回原类型时必须确保类型正确,否则行为未定义。
4. 自定义类型转换
如果类定义了构造函数或类型转换运算符,static_cast 可触发这些转换。
class B {
public:
B(const A&) { }
};
A a;
B b = static_cast(a); // 调用 B(A const&) 构造函数
static_cast 不能做什么
以下操作不能使用 static_cast:
- 去除 const 属性 —— 应使用 const_cast
- 在无继承关系的类指针间转换 —— 可能需要 reinterpret_cast(但危险)
- 处理多态类型的安全向下转换 —— 推荐使用 dynamic_cast
基本上就这些。static_cast 是C++中最常用的类型转换工具,适合大多数“合理且已知”的类型转换场景,既比C风格转换更安全,又比其他cast更高效。只要清楚类型之间的关系,就能正确使用。










