跳转到内容

C++ 编程

来自维基教科书,开放的书籍,开放的世界

static_cast 关键字可用于任何类型的正常转换。依赖于静态(编译时)类型信息的转换。这包括任何数值类型之间的转换、指针和引用在层次结构中的向上转换、使用一元构造函数的转换以及使用转换运算符的转换。对于数值类型之间的转换,如果当前内容适合新类型,则不会执行运行时检查。即使一元构造函数被声明为显式,也会执行转换。

语法
    TYPE static_cast<TYPE> (object);

它还可以将指针或引用向下和跨层次结构转换,只要这种转换可用且明确。例如,它可以将 void* 转换为适当的指针类型,反之亦然。不会执行运行时检查。

BaseClass* a = new DerivedClass();
static_cast<DerivedClass*>(a)->derivedClassMethod();
类型转换的常用用法

在没有显式转换的情况下对不同数据类型的进行算术运算意味着编译器必须执行隐式转换以确保计算中使用的值具有相同的类型。通常,这意味着编译器会将所有值转换为具有最高精度的值的类型。

以下是整数除法,因此返回值为 2。

float a = 5 / 2;

要获得预期的行为,您需要将其中一个或两个常量强制转换为 float

float a = static_cast<float>(5) / static_cast<float>(2);

或者,您需要将其中一个或两个常量定义为浮点数。

float a = 5f / 2f;

华夏公益教科书