C++ 四种cast 的使用场景
简介
static_cast() : 表示编译级别的强制类型转换, 且不能发现运行是的错误. 类似C的(int) 之类的强制转圈, 不能去除const属性, volatile 属性. 还有一个unaligned属性
dynamic_cast<>() : 运行时检查类型. 主要用于含有虚函数的父类和子类之间的指针转换. 会检查是否能够完成这次转换, 如果不能返回0
const_cast<>(): 作为static_cast的补充, 可以去除const属性
reinterpret_cast<>(): 低层次的类型转换, 可以将指针转为int类型或者long类型.
参考链接
https://blog.csdn.net/ykun089/article/details/106495892
https://www.cnblogs.com/chenyangchun/p/6795923.html
code
class Father{
public:
Father(){
cout << "I'am Father!!\n";
}
~Father(){}
virtual void print(){
cout<<"FFFF\n";
}
};
class Son : public Father{
public:
Son() {
cout << "I'am Son!!\n";
}
~Son(){}
void print(){
cout<<"SSSS\n";
}
};
int main() {
const char a = 'a';
int b = static_cast<char>(a);
const int g = 20;
int h = static_cast<int>(g);
// int *h = static_cast<int*>(&g); // 不知道为什么这个const属性会编译出错, 但是上面的不会错误
cout << "=====================" << endl;
Father * f = new Son();
f->print();
Son *p = dynamic_cast<Son*>(f);
p->print();
Father *p1 = dynamic_cast<Father*>(p);
p1->print();
cout << "-----------------------" << endl;
int *h1 = const_cast<int*>(&g); // 去掉const 属性 网站上说去掉const常量const属性
// 看来const 常量和const属性是不一样的. 比如
long long gg = 0;
char * cc = "I love you";
gg = reinterpret_cast<long long>(cc);
cout << gg << endl;
}
C++ 四种cast 的使用场景的更多相关文章
- C++的四种cast操作符的区别--类型转换(转)
转自: http://welfare.cnblogs.com/articles/336091.html Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 r ...
- C++的四种cast操作符的区别--类型转换
Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而 ...
- [转]C++四种cast操作符
http://blog.csdn.net/starryheavens/article/details/4617637 C 风格(C-style)强制转型如下: (T) expression 或 T(e ...
- C++四种cast操作符
C 风格(C-style)强制转型如下: (T) expression 或 T(expression) //函数风格(Function-style) 两种形式之间没有本质上的不同. 对于具有转换的简 ...
- java四种引用类型以及使用场景详解
每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”.在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(re ...
- 面试问题之C++语言:说一说C++中四种cast转换
C++中四种类型转换是:static_cast.dynamic_cast.const_cast.reinterpret_cast 1.const_cast 常量转换,用于将const变量转为非cons ...
- android launchmode(四种启动模式)应用场景及实例
模式介绍 [1] standard 模式 这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中. [2] singleTop 模式 如果在任务的栈顶正好存在该Activ ...
- Java - 四种引用类型及应用场景
1. 强引用 new 一个对象的时候,就是强引用 Object object = new Object(); 只要强引用存在,垃圾回收就不会回收该对象,内存不足时会抛出OOM. 2. 软引用 定义:非 ...
- Java 中的四种引用及垃圾回收策略
Java 中有四种引用:强引用.软引用.弱引用.虚引用: 其主要区别在于垃圾回收时是否进行回收: 1.强引用 使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会 ...
- C++中四种类型转换以及const_cast是否能改变常量的问题
we have four specific casting operators:dynamic_cast, reinterpret_cast, static_cast and const_cast. ...
随机推荐
- Rubymine搭建Ruby开发环境
1.下载和安装Ruby 下载链接:https://rubyinstaller.org/downloads/ 安装示意图: 注意勾选图示的两个选项 安装完成后在cmd窗口运行:ruby -v命令显示当前 ...
- kafka 基础入门
kafka是什么 Kafka (Apache kafka is a distributed streaming platform) ,官方定义是一个分布式流式计算平台.在我开发的项目中,是把kafka ...
- [笔记]这些超级好用的html标签和css属性
1.sup.sub 上标.下标,直接看下面的例子吧 A<sub>2</sub> 4<sup>2</sup> 42 A2 2.伪类属性的love hate ...
- 题解:UVA11214 守卫键盘 Guarding the Chessboard
题意:输入一个 n×mn\times mn×m 棋盘,某些格子有标记.用最少的皇后守卫(即占据或者攻击)所有带标记的格子. 分析:因为不知道放几个皇后可以守卫所有带标记的格子,即回溯法求解时解答树的深 ...
- K8s新手系列之ReplicationController资源
概述 官网地址:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/replicationcontroller/ Repli ...
- vue3 基础-常用模板语法
一个 vue 的单文件 SAP ( single page web application ) 即在一个 .vue 为后缀的文件中, 会包含3个部分. 模板: html 逻辑: javascript ...
- stopPropagation()方法阻止父级事件
方式一 <div id="div1"> <div id="div2"></div> </div> $(" ...
- obs学习之3——obs初始化、析构
在app的开发过程中,obs相关函数的使用顺序如下: 1.首先,初始化obs // 创建obs if ( !obs_startup( "en-US", nullptr, nullp ...
- 一文速通 Python 并行计算:12 Python 多进程编程-进程池 Pool
一文速通 Python 并行计算:12 Python 多进程编程-进程池 Pool 摘要: 在Python多进程编程中,Pool类用于创建进程池,可并行执行多个任务.通过map.apply等方法,将函 ...
- Docker Compose部署随机图API
Docker Compose部署随机图API 平时我们部署博客的时候,为了考虑美观会考虑使用随机图来作为文章的封面,现在有很多大佬愿意提供随机图API,通过API我们可以很方便地部署随机图,不必自己寻 ...