static_cast
静态转型的用途
- 与dynamic_cast不同,static_cast不仅可以用于指针和引用,还可以用于其他型式
- 一般用于非类型式的普通数据对象转型
静态转型的问题
- 不进行运行期型式检查,不安全
- 若转型失败,结果无定义
const_cast
常量转型的目的
- 用于取消或者设置量的const状态(如设置为const或者取消const)
常量转型的问题
- 如果原始数据对象不能写入,则取消常量修饰可能会导致未知的结果
例子:
#include <iostream> class ConstCastTest
{
public:
void SetNum(int num) { _num = num; }
void PrintNum() const;
private:
int _num;
}; void ConstCastTest::PrintNum() const
{
//临时取消常量约束,修改目标对象的内容
//this指向const ConstCastTest*,指向常对象的指针
const_cast<ConstCastTest*>(this)->_num--;
std::cout << _num;
}
reinterpret_cast
复诠转型的目的
- 将任意型式的数据对象转型为目标型式,即重新解释其位序列的意义
- 可以用于整型与指针型的互转
复诠转型的问题
- 由程序员保证重新解释的数据对象是否有意义,编译器简单按照目标型式理解该存储区的内容
- 注意:在64位操作系统中,指针可能为64位,而整型可能为32位,复诠转型有可能丢失数据或者得到错误结果
例子:
#include <iostream>
using namespace std; int f(void *p)
{
unsigned int n = reinterpret_cast<unsigned int>(p);
return n;
} int main()
{
int a[] = { ,,,,,,, };
int n = f(a);
cout << n << endl;
}
C++学习笔记29:运行期型式信息2的更多相关文章
-
C++学习笔记28:运行期型式信息
RTTI 运行期标识对象的型式信息 优势:允许使用指向基类的指针或引用自如地操作派生类的对象 typeid:获取表达式的型式:type_info:型式信息类 头文件:typeinfo 对象转型模板 d ...
-
thinking in java学习笔记:14章 类型信息
14.2 Class 对象 https://github.com/zhaojiatao/javase 1.什么是Class对象,Class对象是用来做什么的? Class对象是java程序用来创建类的 ...
-
【视频编解码&#183;学习笔记】11. 提取SPS信息程序
一.准备工作: 回到之前SimpleH264Analyzer程序,找到SPS信息,并对其做解析 调整项目目录结构: 修改Global.h文件中代码,添加新数据类型UINT16,之前编写的工程中,UIN ...
-
[原创]java WEB学习笔记29:Cookie Demo 之自动登录
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
-
jvm虚拟机笔记<;六>; 运行期优化
这节我们总结一下JVM运行期的优化问题. https://www.cnblogs.com/zhouyuqin/p/5224573.html JVM运行期优化 即时编译器(JIT) 编译对象与触发条件 ...
-
【Unity 3D】学习笔记29:游戏的例子——简单的小制作地图
无论学习.只看不练是坏科学. 因此,要总结回想这怎么生产MMROPG小地图的游戏.于MMROPG游戏类,在游戏世界中行走时导致各地,通常在屏幕的右上角,将有一个区域,以显示当前的游戏场景微缩.在游戏世 ...
-
【视频编解码&#183;学习笔记】13. 提取PPS信息程序
PPS结构解析 与之前解析SPS方式类似 一.定义PPS类: 在3.NAL Unit目录下,新建PicParamSet.cpp和PicParamSet.h,在这两个文件中写入类的定义和函数实现. 类定 ...
-
PHP全栈学习笔记29
前言 这一章主要讲一讲PHP的背景,优势,PHP的环境搭建,书写和调式简单的PHP代码,如何解决简单的PHP错误等. 目录结构 PHP简介 PHP是面向对象,指令式编程,设计者是 拉斯姆斯·勒多夫 出 ...
-
C++学习笔记30:模板与型式参数化
转型操作 接受目标型式作为模板参数 Programmer *p = dynamic_cast<Programmer*>(e) 模板工作原理 使用template<typename T ...
随机推荐
-
Java面向对象基础知识汇总
OOP:Orient Object Programe AOP:Aspect Orient Programe 封装:Encapsulation 继承:Inheritance 多态:Polymorphmi ...
-
python2.6.6安装Image模块
python2.6.6安装Image模块1.下载Image模块源码地址:http://www.pythonware.com/products/pil/index.htm2.加压文件#tar zxvf ...
-
CentOS 根据命令查所在的包
在工作中经常会遇到想用某个命令机器没装却又不知道命令在哪个包(源码编译不再本文范围内),下面介绍个比较笨的方法可以帮助我们搞定这个问题. 说明:蓝色=命令名称 浅绿=命令参数 ...
-
GitCam一款Gif动画制作软件
本篇文章由:http://www.sollyu.com/gitcam-a-gif-animation-software/ 说明 GifCam是一款小巧.免费的录制电脑屏幕并制作成GIF动画的软件,具有 ...
-
WINDOWS OPTIMIZE
WIN10 SHUT DOWN AUTOMATICALLY UPDATE 1.service -> windows update 2.gpedit ->计算机配置 - 管理模板 - Win ...
-
springMVC框架建设进程
1.创建Dynamic Web Project 2.导入spring和springmvc所须要的文件 3.配置web.xml文件 3.1 监听spring上下文容器 3.2 载入spring的xml文 ...
-
php的数据访问和封装运用
php数据访问: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
-
XMR挖矿教程
XMR挖矿教程 XMR介绍 门罗币(Monero,代号XMR)是一个创建于2014年4月开源加密货币,它着重于隐私.分权和可扩展性.与自比特币衍生的许多加密货币不同,Monero基于CryptoNot ...
-
【原创】C# API 未能创建 SSL/TLS 安全通道 问题解决
在调用执行API之前添加以下代码就行了 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
-
swift 8.0之后打开 手机设置
if #available(iOS 8.0, *){ if let url = URL(string: UIApplication.openSettingsURLString), UIApplicat ...