C++ 之 强制转换

C语言当中的强制转换基本没有任何的限制,只需要一个括号即可,而在C++中,对强制转换有了一定的限制,这样避免了我们在使用时造成的不明确问题,同时也增加了代码的可读性。一共有四种,分别时static_cast、reinterpret_cast、const_cast、dynamic_cast。

1.static_cast转换

可以实现相同类型之间的转换,如:double b ;int  a = static_cast<int>(b);

2.reinterpreter_cast 转换

可以实现不同类型之间的转换,如指针到整型

int* aas = new int[1] ;
aas[0] = 1;
int b = reinterpret_cast<int>(aas);   ////b中的值为aas 指针的地址

3.const_cast 转换

const_cast 中的类型必须时指针、引用或指向对象成员类型的指针

const int constA = 10;
const int *pConstA = &constA;
int* b = const_cast<int*>(pConstA);
*b = *b + 1;
printf("%d ,%d",constA,*b);/////10  11     可以发现constA中的值并没有发生变化,因为constA是一个常量,若constA没有const的修饰,最后的结果将是11  11

4.dynamic_cast 转换

dynamic_cast实现的是多态类之间的的转换

对于“向上转换”(即派生类指针或引用类型转换为其基类类型),无论是指针还是引用向上转换都是安全地。

对于“向下转型”有两种情况:
一种是基类指针所指对象是派生类类型的,这种转换是安全的;
另一种是基类指针所指对象为基类类型,在这种情况下dynamic_cast在运行时做检查,转换失败,返回结果为0;
https://blog.csdn.net/u010275850/article/details/49452373    我觉得这篇博客对于dynamic_cast的转换好理解

原文地址:https://www.cnblogs.com/hit-ycy/p/10846466.html

时间: 2024-10-13 14:52:07

C++ 之 强制转换的相关文章

访问一个绝对地址把一个整型数强制转换 (typecast)为一个指针是合法的

在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66.编译器是一个纯粹的ANSI编译器.写代码去完成这一任务. 解析:这一问题测试你是否知道为了访问一个绝对地址把一个整型数强制转换(typecast)为一个指针是合法的.这一问题的实现方式随着个人风格不同而不同.典型的代码如下: 一个较晦涩的方法是: 建议你在面试时使用第一种方案.答案:

PHP强制转换类型

获取数据类型 : 1.如果想查看某个表达式的值和类型,用var_dump(). 2.如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype().3.要查看某个类型,不要用 gettype(),而用is_type() 函数. ■字符串转换为数值 当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值. 如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值.否则就被当作整数. 该值由字符串最前面的部分决定.如果字符串以合法的数字数据开始,就用该

c语言-类型强制转换

强制转换的条件: 1.当所声明的类型不能满足所符值的变量时,需要转换声明的类型,以便能够存储变量. 例如:short存储的最大值为32767,但是所要符值大于32767时,short类型不符合,需要转换short类型.short MarSold = 61600;时就是错的. 2.丢失精度,当除以一个1.0和除以1是不同的.可能造成值的差别.整型除以整型只能得到整型,符值前先进行四舍五入后再符值.a=int/int,就算a是float但是得到是四舍五入后的值.可以将int转成float就可以得到精

【读书笔记】C#高级编程 第七章 运算符和类型强制转换

(一)运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ -- 移位运算符 << >> 比较运算符 == != < > <= >= 赋值运算符 = += -= *= /= %= &= |= ^= <<= >>= 成员访问运算符(用于对象和结构) . 索引运算符(用于数组和索引器) [] 类型转换运算符 () 条件

c++ 继承类强制转换时的虚函数表工作原理

本文通过简单例子说明子类之间发生强制转换时虚函数如何调用,旨在对c++继承中的虚函数表的作用机制有更深入的理解. #include<iostream> using namespace std; class Base { public: virtual void f() { cout<<"Base::f()"<<endl; } }; class child1:public Base { public: virtual void f() { cout&l

输入与输出,数据类型,强制转换,运算符

输入与输出 输出console.write();不换行 输出console.writeline();打印之后换行 输入console.read();不换行 输入console.readline();换行 字符串之间运用加号进行拼接,数字之间加号表示运算. 数据类型: int(整型)   long  double(双精度浮点数)  string(字符串型)  bool 强制转换: int a=covert.toint32(console.readline()); int a=int.parse(c

数据类型的强制转换

public class Test { public static void main(String[]args) { int a=4; double b=3.6; //int c=a+b; int c=a+(int)b; System.out.println(c); } } 输出的结果是7 注释那行就会出错,原因:a是int类型,b是double类型    c就是double类型的 如果要想c是int类型的,就必须进行强制类型转换 强制转换,必须是富人(double)转换为穷人(int)因为他

JAVA数据类型自动转换,与强制转换

一.数据类型自动转换 public class Test{ public static void main(String[] args){ int a = 1; double b = 1.5; double a_b_count = a+b; //整型与双精度型相加时,结果会自动转换为双精度型 String c = "凌"; char d = '晨'; char e = '好'; String c_d_e_content = c+d+e; //字符型与字符串型相加时,结果会自动转换为字符

求解:为什么父类没有的属性,在强制转换成子类后却有值了

foreach (M912 m912 in m912List) { var m934 = (M934)m912; //强制转换后,父类M912 中没有的属性m918List在转换后的子类m934中能访问且有值 } 说明:其中M912 是父类M934 是子类 m918List是子类M934的一个属性 疑问,为什么父类没有的属性,在强制转换成子类后却有值了,这种情况是如何实现的? ************************************ 问题:将子类实例赋值给父类的实例后,子类对象所

PHP类型转换&amp;&amp;类型强制转换

获取数据类型 : 如果想查看某个表达式的值和类型,用 var_dump(). 如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype(). 要查看某个类型,不要用 gettype(),而用 is_type() 函数. ■字符串转换为数值 当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值. 如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值.否则就被当作整数. 该值由字符串最前面的部分决定.如果字符串以合法的数字数据开始,就用该数字作