C++新型强制类型转换。
C++强制类型转换分为4个不同的类型。
1、static_cast
-用作基本类型转换。
-不能用于基本类型指针转换。
-可以用于有继承关系对象之间的转换和类指针之间的转换。
#include <stdio.h> void static_cast_demo(void)
{
int i = 0x12345;
char c = 'c';
int* pi = &i; //pi -> i
char* pc = &c; //pc -> c c = static_cast<char>(i);//int i change to char c
pc = static_cast<char*>(pi);//想通过 static_cast 将int 型指针转换为 char型指针。由于static_cast不能用于基本类型指针转换error
} int main(int argc, char *argv[])
{ return ;
}
编译结果:
test.cpp: In function ‘void static_cast_demo()’:
test.cpp::: error: invalid static_cast from type ‘int*’ to type ‘char*’
2、const_cast
-用于去除变量的只读属性。
-强制内心转换的目标只能是指针或者引用
/*强制类型转换*/
#include <stdio.h> void const_cast_demo(void)
{
const int& j = ;//定义一个j引用常量,j拥有只读属性
int& k = const_cast<int&>(j);//定义一个k,通过const_cast k去除了j所拥有的只读属性 const int x = ; //定义一个常量x x拥有只读属性
int& y = const_cast<int&>(x);//定义一个y 通过const_cast y去除了引用x时所拥有的只读属性,所以y是可变的 int z = const_cast<int>(x);//想通过const_cast 来将x转换为一个int型变量,这不允许,因为const_cast 强制转换的目标只能是指针或者引用。error k = ; printf("k = %d\n", k);
printf("j = %d\n", j); y = ; printf("x = %d\n", x);
printf("y = %d\n", y);
printf("&x = %p\n", &x);
printf("&y = %p\n", &y); } int main(int argc, char *argv[])
{ const_cast_demo();
return ;
}
编译结果:
test.cpp: In function ‘void const_cast_demo()’:
test.cpp::: error: invalid use of const_cast with type ‘int’, which is not a pointer, reference, nor a pointer-to-data-member type
3、dynamic_cast
-用于指针类型之间的强制类型转换。
-用于整数和指针类型之间的强制类型转换。
#include <stdio.h> void dynamic_cast_demo()
{
int i = ;
int* pi = &i;
char* pc = dynamic_cast<char*>(pi);//dynamic_cast 只能用于整数与指针类型之间的相互转换,这里将 整数类型转换为 char*类型 error
}
int main(int argc, char *argv[])
{ return ;
}
编译结果:
test.cpp: In function ‘void dynamic_cast_demo()’:
test.cpp::: error: cannot dynamic_cast ‘pi’ (of type ‘int*’) to type ‘char*’ (target is not pointer or reference to class)
4、reinterpret_cast
-用于有继承关系的类指针之间的转换。
-用于有交叉关系的类指针之间的转换。
-具有类型检查功能。
-需要虚函数的支持。
#include <stdio.h> void reinterpret_cast_demo()
{
int i = ;
char c = 'c';
int* pi = &i;
char* pc = &c; pc = reinterpret_cast<char*>(pi);//将int* 类型指针 转换为 char*
pi = reinterpret_cast<int*>(pc);//将char* 类型指针 转换为 int*
pi = reinterpret_cast<int*>(i);//将int 类型转换为 int*类型指针
c = reinterpret_cast<char>(i); //想 通过reinterpret_cast 将int型 转换为char型 普通类型转换使用static_cast error
}
int main(int argc, char *argv[])
{ return ;
}
编译结果:
test.cpp: In function ‘void reinterpret_cast_demo()’:
test.cpp::: error: invalid cast from type ‘int’ to type ‘char’
用法格式:xxx_cast <type>(Expression)
C++新型强制类型转换。的更多相关文章
- C++ 强制类型转换详解
类型转换只不过是让编译器以另外一种方式解释一块内存而已.C++兼容C语言的强制类型转换方式,同时也提供了新型的基于模板的类型转换方式,来提供更多的安全性. 一.C风格的强制类型转换 double k ...
- java中强制类型转换
在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...
- C++强制类型转换
C语言强制类型转换过于粗暴,任意类型之间都可以进行转换,编译很难判断其正确性; 难于定位,在源码中无法快速定位所有使用强制类型转换的语句. C++将强制类型转换分为4种不同的类型:static_cas ...
- java提高篇(十一)-----强制类型转换
在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...
- JavaScript学习10 JS数据类型、强制类型转换和对象属性
JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...
- C++强制类型转换操作符 dynamic_cast
dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用. >>>>>>>>>>>编译器的RTTI设 ...
- C++强制类型转换操作符 const_cast
const_cast也是一个强制类型转换操作符.<C++ Primer>中是这样描述它的: 1.将转换掉表达式的const性质. 2.只有使用const_cast才能将const性质性质转 ...
- C++强制类型转换操作符 static_cast
static_cast是一个强制类型转换操作符.强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast.dynamic_cast.const_cast.reinterpert ...
- Js里面的强制类型转换
js 和 PHP语言一样是弱类型语言.近期我也在看C语言,并没有传说中那么难,既是书中一再强调的指针部分,也没有那么夸张.至少是理论和语法理解起来不是很难.看起来凡是什么东西,不要总是被别人的话迷惑了 ...
随机推荐
- hive 分组排序函数 row_number() over(partition by " " order by " "desc
语法:row_number() over (partition by 字段a order by 计算项b desc ) rank --这里rank是别名 partition by:类似hive的建表, ...
- Python argparse 用法总结
使用argparse的四个基本步骤 创建 ArgumentParser() 对象 调用 add_argument() 方法添加参数 使用 parse_args() 解析添加的参数 # example ...
- JAVA使用easyexcel操作Excel
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本 ...
- CSS Selectors
CSS selectors are used to "find" (or select) HTML elements based on their element name, id ...
- 代理模式与AOP
代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联 ...
- 第11组 Beta冲刺(2/5)
第11组 Beta冲刺(2/5) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11997386.html 作业博客 https://edu.cn ...
- koa 基础(一)新建/启动 项目
1.创建项目 npm init -y npm install --save koa 2.app.js // 引入模板 var koa = require('koa'); // 实例化 var app ...
- Java中的23种设计模式与7大原则
一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...
- 降级、熔断、限流[z]
[z]https://juejin.im/post/5cced96e6fb9a032514bbf94当我们的系统的访问量突然剧增,大量的请求涌入过来,最典型的就是秒杀业务了,我们可能会知道会有一波高峰 ...
- UI自动化-selenium-api封装pyse框架
# coding=utf-8 import time from selenium import webdriver from selenium.webdriver.common.action_chai ...