C++ 强制类型转换使用场景

简介: C++ 强制类型转换使用场景

一、C中类型转换

  1. (T)exp
  2. T(exp)


二、C++中类型转换

1. static_cast(exp)

  • 类层次间转换:
    上行转换是安全的
    下行是不安全的,没有动态类型检查
  • 基本类型转换
  • 空指针转换为目标类型空指针
  • non-const转换为const
  • 局限:不能去掉const、volitale等属性

2. const_cast(exp)

  • 去掉对象指针或对象引用的const属性
  • 目的:修改指针(引用)的权限,可以通过指针或引用修改某块内存值

3. dynamic_cast(exp)

  • 用于多态,在运行时进行类型转换
  • 在一个类层次结构中安全地类型转换,把基类指针(引用)转换为派生类指针(引用)
  • 因为引用不存在空引用,转换失败会抛出bad_cast异常

4. reinterpret_cast(exp)

  • 改变指针(引用)类型
  • 将指针(引用)转换为一个整型
  • 将整型转换为指针(引用)
  • T 必须为指针、引用、整型、函数指针、成员指针
  • 仅仅是比特位拷贝,没有安全检查

推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:

零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)

https://xxetb.xet.tech/s/VsFMs


相关文章
|
8月前
|
存储 安全 API
C++ 17 新特性 C++ String View:了解C++ 17 std::string_view的使用场景
C++ 17 新特性 C++ String View:了解C++ 17 std::string_view的使用场景
335 2
|
8月前
|
存储 人工智能 编译器
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
115 1
|
8月前
|
C++
C/C++ 基础题:预处理器宏中,##的使用场景,什么时候需要使用它?
C/C++ 基础题:预处理器宏中,##的使用场景,什么时候需要使用它?
44 1
|
8月前
|
编解码 Unix Linux
【Linux C/C++ 延时(延迟)函数比较】介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
【Linux C/C++ 延时(延迟)函数比较】介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
2510 1
|
8月前
|
并行计算 算法 安全
【C++ 迭代器 】C++ 迭代器标签的使用场景
【C++ 迭代器 】C++ 迭代器标签的使用场景
96 0
|
8月前
|
C++
[C++] 强制类型转换(dynamic_cast和dynamic_Pointer_cast)
[C++] 强制类型转换(dynamic_cast和dynamic_Pointer_cast)
134 1
|
8月前
|
存储 编译器 C++
掌握 C++ 中 static 关键字的多种使用场景
在最开始C中引入了static关键字可以用于修饰变量和函数,后来由于C++引入了class的概念,现在static可以修饰的对象分为以下5种:
91 0
|
存储 Cloud Native 编译器
C++智能指针种类以及使用场景
C++智能指针种类以及使用场景
|
人工智能 编译器 程序员
C++11之decltype类型推导(使用场景、推导四规则、cv限定符)
C++11之decltype类型推导(使用场景、推导四规则、cv限定符)
318 0
|
安全 C++
C++11之强制类型转换(static_cast,const_cast,dynamic_cast,reinterpret_cast)
C++11之强制类型转换(static_cast,const_cast,dynamic_cast,reinterpret_cast)
125 0