c++ | cast
const_cast
修改类型的const或volatile属性,添加const/删除const。(好像大多是删除
int n = 5;
int *k1 = const_cast<int*>(&n); //指针
*k1 = 1;
int &k2 = const_cast<int&>(n); //引用
k2 = 2;const int a = 10;
int* b = const_cast<int*>(&a);
*b = 11;//指针b的属性变成可读可写
但是,对声明为const的变量来说,常量就是常量,任你各种转化,常量的值就是不会变。
因此,const_cast 的主要作用为:
函数的形参不是const,且函数不会改动参数值,则使用const_cast
const int constant = 21;
InputInt(constant); // error: “InputInt”: 不能将参数 1 从“const int”转换为“int *”
InputInt(const_cast<int*>(&constant)); // 用来将const转化为非const
static_cast 将隐式转换明确表示出来
1. 用于内置数据类型的转化
2. 把void类型指针转为目标类型指针(不安全)
3. 子类与父类的转换(子类转父类安全,父类转子类不安全)
不可用于指针之间的转换
父转子不安全的原因:子类的成员/方法往往比父类多,假如原父指针指向父类对象,强制转换成子类指针时,调用子类的方法,但父对象中是没有这个方法的,会出问题。如果用dynamic_cast就直接阻止了这种转换。
dynamic_cast
1. 用于含虚函数的父类和子类的转换,主要用于父类转子类。子类转父类时作用与static_cast一样。主要是弥补static_cast父转子的不安全
// 父转子时,父类的指针必须指向子类对象 (这也是为什么必须有虚函数)base *bs = new derive();
derive *de = dynamic_cast<derive*>(bs); // 成功base *bs2 = new base();
derive *de2 = dynamic_cast<derive*>(bs2); // 不成功,阻止该操作
reinterpret_cast
reinterpret代替显示转换,用于转换各种高风险的转换
原理是,直接把数据类型A的地址解释成另一个数据类型B的地址,逐个比特复制
c++ | cast相关推荐
- Go 知识点(12) — 类型转换以三方库 cast
类型转换在编程语言中是很常见的操作,在 Go 语言中其类型转换有下面一些注意点. 1. 整数类型之间的转换 对于整数类型转换,原则上目标类型的取值范围要包含被转换值,也就是说要转换类型的值取值范围要小 ...
- tf.cast()数据类型转换
tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32. cast定义: cast(x, ...
- tf.cast() 张量数据类型转换
tf.cast() 数据类型转换 import tensorflow as tf t1 = tf.Variable([1,2,3,4,5]) # 生成张量 t1 <tf.Variable 'Va ...
- as cast float server sql_SQL-Server(五)T-SQL语言
5.1 T-SQL语言简介 T-SQL语言由以下几部分组成: 1.数据定义语言(Data Definition Language,DDL).DDL用于执行数据库任务,对数据库及数据库中的各种对象进行创 ...
- 《MySQL CAST与CONVERT
MySQL中的CAST()和CONVERT()可用来获取一个类型的值,并产生另一个类型的值. CAST(value as type) CONVERT(value, type) 可以转换的类型是有限的, ...
- SQL 语句转换格式函数Cast、Convert
CAST和CONVERT都经常被使用.特别提取出来作为一篇文章,方便查找. CAST.CONVERT都可以执行数据类型转换.在大部分情况下,两者执行同样的功能,不同的是CONVERT还提供一些特别的日 ...
- oracle+cast函数+长度,oracle cast() 函数问题
oracle cast() 函数问题 关键字: oracle cast() 函数问题 SQL> create table t1(a varchar(10)); Table created. SQ ...
- java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer 1.改sql select ...
- sql server 2005 T-SQL CAST 和 CONVERT (Transact-SQL)
将一种数据类型的表达式显式转换为另一种数据类型的表达式.CAST 和 CONVERT 提供相似的功能. Transact-SQL 语法约定 语法 Syntax for CAST: CAST ( exp ...
- sql数据类型转换(cast() and convent())函数)
sql数据类型转换(cast() and convent())函数) sql数据类型转换(cast() and convent())函数) 当 Microsoft® SQL Server™ 2000 ...
最新文章
- 内存技术:入门和测试挑战
- 你是合格的程序员吗?(欢迎大家自测)
- Spring 更好地处理 Struts 动作
- EDAS 4.0 助力企业一站式实现微服务架构转型与 K8s 容器化升级
- boost::callable_traits的is_reference_member的测试程序
- Robochameleon——Quick Start Guide
- 三行代码隐藏所有console.log
- mysql视图什么时候用_Mysql为什么要使用视图?
- J2EE架构师路线脑图
- 常用Java静态代码分析工具的分析与比较
- PS学习笔记一:跟着李涛学PS第一讲——光和色的关系
- Tinker爬坑之路
- 基于MATLAB霍夫变换的复杂情况下车道线检测
- 前沿 | 社区问答系统及相关技术
- OpenCV:将一个三角形形变到另一个三角形
- 移动互联网感言(董烨/Joven.Dong)
- vue3+vite UC浏览器兼容
- 关于陌陌和微信表情页与输入法之间切换的问题
- 映射报错怎么解决 Ambiguous mapping. Cannot map ‘basicPersonStreamDataController‘ method
- 【编程语录】59条令人捧腹但真实的程序员编程语录