首页 > 编程语言 >c++中static_cast的用法

c++中static_cast的用法

时间:2024-07-20 09:55:38浏览次数:18  
标签:类型转换 转换 浮点 c++ cast static 显式

在 C++ 中,`static_cast` 是一种用于执行静态类型转换的运算符。它用于在编译时进行类型转换,包括隐式和显式类型转换,但不能用于转换具有无关类型的指针。

`static_cast` 可以用于以下情况:

1. 隐式类型转换:`static_cast` 可以在不丢失信息的情况下执行隐式类型转换,例如将整数类型转换为浮点类型。不丢失精度。

2. 显式类型转换:`static_cast` 可以用于显式地将一个类型转换为另一个类型,例如将浮点转换为整数类型。一般会丢失精度。

3. 类层次结构中的向上转换:`static_cast` 可以将指向派生类对象的指针或引用转换为指向基类对象的指针或引用。这种转换在基类和派生类之间存在继承关系时是安全的。

下面是一些使用 `static_cast` 的示例:

```cpp
int main() {
    // 隐式类型转换
    int x = 10;
    double y = static_cast<double>(x); // 将整数类型转换为浮点类型

    // 显式类型转换
    double a = 3.14;
    int b = static_cast<int>(a); // 将浮点类型转换为整数类型

    // 类层次结构中的向上转换
    class Base {
    public:
        virtual void print() {
            std::cout << "Base class" << std::endl;
        }
    };

    class Derived : public Base {
    public:
        void print() override {
            std::cout << "Derived class" << std::endl;
        }
    };

    Derived derived;
    Base& baseRef = static_cast<Base&>(derived); // 将派生类引用转换为基类引用
    baseRef.print(); // 调用基类的 print() 方法

    return 0;
}
```

在上述示例中,我们展示了 `static_cast` 的三种使用方式:
- 隐式类型转换:将整数类型转换为浮点类型。
- 显式类型转换:将浮点类型转换为整数类型。
- 类层次结构中的向上转换:将指向派生类对象的引用转换为指向基类对象的引用,并调用基类的方法。

需要注意的是,`static_cast` 并不进行运行时检查,因此要确保转换是安全的,以避免潜在的错误。

隐式类型转换(Implicit Type Conversion)指的是在不需要明确指定的情况下,由编译器自动进行的类型转换。这种转换是根据类型之间的隐含规则进行的,通常是为了保持表达式的一致性和兼容性。例如,将一个整数类型赋值给一个浮点类型的变量,或将一个较小的整数类型作为参数传递给一个接受较大整数类型的函数。

显式类型转换(Explicit Type Conversion)是通过使用显式的类型转换运算符来明确指定要进行的类型转换。它提供了更明确和精确的控制,需要在代码中显式地使用转换运算符进行类型转换。这种转换可以帮助避免意外的类型转换和数据丢失。

标签:类型转换,转换,浮点,c++,cast,static,显式
From: https://blog.csdn.net/weixin_37841024/article/details/140561551

相关文章

  • c++中const_cast和dynamic_cast的用法
    `const_cast`和`dynamic_cast`是C++中的两个类型转换运算符,用于转换指针或引用的类型。它们的使用方式如下:1.`const_cast`:  -`const_cast`用于去除指针或引用的`const`或`volatile`限定符,以便对其进行修改。  -`const_cast`只能用于转换掉对象的常量性,......
  • [C++]优先级队列
    1.了解优先级队列优先级队列是一种容器适配器,根据一些严格的弱排序标准,专门设计使其第一个元素始终是它所包含的元素中最大的元素。此上下文类似于堆,其中可以随时插入元素,并且只能检索最大堆元素(优先级队列中顶部的元素)。优先级队列是作为容器适配器实现的,容器适配器是使......
  • [C++初阶]deque的讲解
    1.deque介绍          Deque是双端队列的不规则缩写。双端队列是具有动态大小的序列容器,可以在两端扩展或收缩。特定的库可能以不同的方式实现deque,通常是某种形式的动态数组。在任何情况下,它们都允许通过随机访问迭代器直接访问单个元素,并根据需要通过扩展和收缩......
  • Windows图形界面(GUI)-DLG-C/C++ - 工具栏(ToolBar)
    公开视频-> 链接点击跳转公开课程博客首页-> ​​​​​​链接点击跳转博客主页目录工具栏(ToolBar)创建工具栏-CreateWindowEx初始工具栏-TB_BUTTONSTRUCTSIZE工具栏图标-TBADDBITMAP-TB_ADDBITMAP工具栏按钮-TB_ADDBUTTONS示例代码工具栏(ToolBar)......
  • Windows图形界面(GUI)-DLG-C/C++ - 滑动条(Trackbar)
    公开视频-> 链接点击跳转公开课程博客首页-> ​​​​​​链接点击跳转博客主页目录滑动条(Trackbar)使用场景初始控件控件消息示例代码滑动条(Trackbar)使用场景音量控制亮度调节视频播放进度控制任何需要用户在特定范围内选择值的场景初始控件TBM_......
  • 【C++进阶学习】第七弹——AVL树——树形结构存储数据的经典模块
    二叉搜索树:【C++进阶学习】第五弹——二叉搜索树——二叉树进阶及set和map的铺垫-CSDN博客目录一、AVL树的概念二、AVL树的原理与实现AVL树的节点AVL树的插入AVL树的旋转AVL树的打印AVL树的检查三、实现AVL树的完整代码四、总结前言:在前面我们学习二叉搜索树的......
  • c++的继承
    目录一、什么是继承二、继承的格式三、子类和父类一、子类对父类的赋值二、子类与父类的同名成员变量 三、子类和父类的同名成员函数四、子类的默认成员函数一、构造函数二、析构函数三、拷贝构造四、赋值运算符重载一、什么是继承定义:继承(inheritance)机制......
  • C++类和对象(二)
    目录默认成员函数一、构造函数二、析构函数三、拷贝构造函数四、赋值运算符重载五、取地址运算符重载六、const成员函数七、日期类实现默认成员函数默认成员函数就是用户没有显式实现,编译器会自动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默......
  • 线程池(C++11)
    已经有现成的实现,本博客摘抄讲解附源码链接。参考的博客质量已经非常高,避免找来找去。1、避免频繁创建、销毁线程,实现复用。思路如下:2、线程函数多种多样,如何封装成统一的函数类型void()第一次封装我们使用bind()函数将多个参数的函数封装为没有形参的package_task对象,因为p......
  • 奇妙的 c++ 混合运算式
    先来看看如下的式子:a*b+c当你在c++中运行它时,你很清楚它是先计算*再计算+的。那么请再来看看这个式子:a+b+c请问它是先执行第一个+,还是先执行第二个+呢?这个问题看上去无解,但实际上我们可以解答:#definelllonglonginta=INT_MAX,b=INT_MAX;llc......