Static cast

static_cast是C++编程语言中的一个标识符，是用于模式转换的运算符。

 语法 
static_cast<type> (object);

其中，type是类型标识符，object是待转换的变量名称（其类型标识不需要在这里声明）。

需要注意的是static_cast要求编译器必须能够通过已知的方法将object从其原有的类型转换为type类型（不管是通过内置方法 (builtin) 还是转换方法 (cast)）。类型可以是引用 (reference) 或者是枚举器 (enumerator)。static_cast的适用范围比较广泛，任何编译器定义明确的、允许转换的类型都可以使用它来相互转换。

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是可以返回数值的，例如以下代码是合法的：
long var = 1000;
std::cout << static_cast<int> (var) << std::endl;

 參考資料 

Category:C++
Category:类型论