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. ...
随机推荐
- 什么是 MySQL 的主从同步机制?它是如何实现的?
什么是 MySQL 的主从同步机制?它是如何实现的? MySQL 的主从同步机制是一种将主数据库(Master)上的数据实时或接近实时地同步到从数据库(Slave)的机制.通过这种机制,从数据库可以获 ...
- 多年后再做Web开发,AI帮大忙
最近在AI辅助下做一个简单的网站开发,真是感叹AI的强大呀! 虽然多年前我做过Web前端和后端开发,但是那时候的开发没有现在这么容易入门.上手. 之前SSH(Structs2+Spring+Hiber ...
- 四十种AI编程工具,让你码字如飞
用过AI编程工具的都知道,这玩意儿虽说还有待完善,但是确实能提高效率啊,真香啊. 是这样的,最近一个同学离职,我临时接手了他的BI数据后台,我一个不会前端的人,使用AI编程工具,发送简单的指令,竟然使 ...
- http2和http3
HTTP/2 和 HTTP/3 是 HTTP 协议的升级版本,主要为了解决 HTTP/1.x 协议的性能瓶颈和安全性问题.以下是它们的主要目标和解决的问题: HTTP/2 的主要目标和解决的问题 1. ...
- 【记录】Opencv+LibTorch安装
环境Ubuntu20.04. [Opencv]源码编译:Linux系统下opencv3.4.1安装教程 [LibTorch]下载已编译版本:在Ubuntu下安装LibTorch [磁盘空间不足]vmw ...
- 内网私仓全流程搭建记录(二)-npm私仓提交与拉取
1.npm私仓依赖下载及本地上传 方法一1)使用Pycharm创建py文档,写入如下py代码: import os import re import aiohttp import asyncio fr ...
- IT道道网,深度分享IT行业经营智慧的网站
IT道道网简介 IT道道网(itddw.com)是为IT人提供行业门道技巧.方案案例的学习分享平台,汇集前辈智慧,分享IT行业市场开拓.经营运营.项目管理.产品规划设计.前沿技术应用各方面经验案例. ...
- Python3 + selenium 获取疫情中高风险区数据
背景: 需要动态将疫情风险区数据和区域业务动作想结合, 赋能销售业务, 内部使用非商用哈 环境: Python3 + selenium 自动化测试软件中 Chrome 驱动 exe 文件 输出: 以 ...
- CentOS 7.6 安装JDK 1.8
第一步,下载一个rpm包,下载链接如下 https://www.oracle.com/cn/java/technologies/downloads/ 第二步:上传到服务器中 第三步:输入命令进行安装 ...
- 【MySQL】字符串截取函数substring_index
业务场景描述:如何根据分隔符切割字符串?使用函数SUBSTRING_INDEX()根据指定分隔符切割,分隔符可以是字符串等. 语法:substring_index(str,delim,count) 说 ...