static_cast
static_cast
是C++编程语言中的一个标识符,是用于模式转换的运算符。[1]
语法
static_cast<type> (object);
其中,type
是类型标识符,object
是待转换的变量名称(其类型标识不需要在这里声明)。
需要注意的是static_cast
要求编译器必须能够通过已知的方法将object
从其原有的类型转换为type
类型(不管是通过内置方法 (builtin) 还是转换方法 (cast))。类型可以是引用 (reference) 或者是枚举器 (enumerator)。static_cast
的适用范围比较广泛,任何编译器定义明确的、允许转换的类型都可以使用它来相互转换。[2]
static_cast
可以在如下场景中使用:
- 把一个指向基类 (base class) 的指针转换为指向非虚派生类 (non-virtual derived class) 的指针;
- 把数值类型的数据(但不是数值,例如
enum
)转换为数值(例如int
或float
)。
虽然static_cast
会在编译时检查 (compiler-time checked) 以防止出现明显的不兼容或错误现象;但是,其不会在运行时检查 (run-time checking) 不明显的不兼容现象(例如指针之间的转换)。举一个例子,我们假定一个static_cast
将一个类指针B
转换为一个派生类指针D
,如果B
是派生类D
模糊或不可访问的基类,那么static_cast
就是错误的。再比如,一个指向虚基类的指针,或者指向虚基类的基类的指针,用static_cast
转换为指向派生类的指针就是错误的。
另外,static_cast
是可以返回数值的,例如以下代码是合法的[3]:
long var = 1000;
std::cout << static_cast<int> (var) << std::endl;
参考资料
- ^ Programming: Principles and Practice Using C++. New Jersey, US: Addison-Wesley. 2009: 594. ISBN 978-0321543721. OCLC 988823060.
- ^ Eckel, Bruce. Thinking in C++. New Jersey, US: Prentice Hall. 2000: 857. ISBN 0-13-979809-9.
- ^ Prada, Stephen. C++ Primer Plus. New Jersey, US: Pearson Education, Inc. 2015: 107. ISBN 978-7-115-38111-8.