reinterpret_cast

“warning: use of old-style cast” in g++ [duplicate]

匿名 (未验证) 提交于 2019-12-03 03:04:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: Possible Duplicate: When should static_cast, dynamic_cast and reinterpret_cast be used? With this C++ code, char* a = (char*) b; I got warning warning: use of old-style cast . What would be the new-style cast? 回答1: reinterpret_cast , static_cast , dynamic_cast and const_cast are the c++ cast alternatives. const_cast to remove const/volatile from a const variable. dynamic_cast to perform runtime validity checks when casting in between polymorphic types static_cast to perform e.g up/down-cast in a inheritance hierarchy, but with no runtime

static_cast和reinterpret_cast

匿名 (未验证) 提交于 2019-12-03 00:25:02
形式:static_cast<type_id>(expression); 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 用法:1.用在类层次结构中基类和派生类之间的指针或引用的转换。上行转换(派生类转换为基类)是安全的,下行转换不安全。 2.数据类型之间的转换,像int和char,只能由char转成int,不然溢出了 3.把空指针转换成目标类型指针。(引用不能为空) 4.可以把任何类型的表达式转换成void型 注意:转化后,表达式中的volatile,const,_unalign不变 形式:reinterpret_cast<type_id>(expression); 该运算符把expression转换为type-id类型 用法:1.它可以把一个指针转成整型,再把这个整型转成原来的那个指针(因为操作符只是重新解释了比特模型而并没有进行二进制转换) 2.int *n= new int ; double *d=reinterpret_cast<double*> (n); 在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析。 因此, 需要谨慎使用 reinterpret_cast. 转载请标明出处: static_cast和reinterpret_cast

C语言中的4种强制类型转换!

半世苍凉 提交于 2019-12-02 11:39:35
前言 在C语言中,我们需要做类型转换时,常常就是简单粗暴,在C++中也可以用C式强制类型转换,但是C++有它自己的一套类型转换方式。 C式的显示类型转换 先来说说C式的强制类型转换,它的用法非常简单,形如下面这样 Type b =111; Typea a = (Typea)b; 只需要用括号将你要转换的类型扩起来,放在要转换的变量前面即可。 举个例子: #include<stdio.h> intmain(void) { inta =0x01020304; char*b = (char*)&a; inti =0; for(;i <4;i++) { printf("%02x\n",b[i]); } return0; } 编译运行输出结果: 04 03 02 01 如果你好奇为什么会是这样的结果,请参考 《字节序的那些事》 。 C++ 四种强制类型转换。 当然,C++也是支持C风格的强制转换,但是C风格的强制转换可能带来一些隐患,让一些问题难以察觉.所以C++提供了一组可以用在不同场合的强制转换的函数。 const_cast , static_cast , dynamic_cast , reinterpret_cast const_cast 常量指针被转化成非常量的指针,并且仍然指向原来的对象; 常量引用被转换成非常量的引用,并且仍然指向原来的对象; const_cast一般用于修改指针

C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结

↘锁芯ラ 提交于 2019-12-02 02:46:23
C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结_C 语言_脚本之家 http://www.jb51.net/article/55885.htm 这篇文章主要介绍了C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结,需要的朋友可以参考下 前言 这篇文章总结的是C++中的类型转换,这些小的知识点,有的时候,自己不是很注意,但是在实际开发中确实经常使用的。俗话说的好,不懂自己写的代码的程序员,不是好的程序员;如果一个程序员对于自己写的代码都不懂,只是知道一昧的的去使用,终有一天,你会迷失你自己的。 C++中的类型转换分为两种: 1.隐式类型转换; 2.显式类型转换。 而对于隐式变换,就是标准的转换,在很多时候,不经意间就发生了,比如int类型和float类型相加时,int类型就会被隐式的转换位float类型,然后再进行相加运算。而关于隐式转换不是今天总结的重点,重点是显式转换。在标准C++中有四个类型转换符:static_cast、dynamic_cast、const_cast和reinterpret_cast;下面将对它们一一的进行总结。 static_cast static_cast的转换格式:static_cast <type

C++与类型转换相关的四个关键字

南笙酒味 提交于 2019-11-30 17:18:42
C++与类型转换相关的四个关键字有:const_cast、static_cast、dynamic_cast、reinterpret_cast C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a。 C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。 reinterpret_cast,仅仅重新解释类型,但没有进行二进制的转换。 4种类型转换的格式,如:TYPE B = static_cast(TYPE)(a)。 const_cast 去掉类型的const或volatile属性。 static_cast 类似于C风格的强制转换。无条件转换,静态类型转换。用于: 1. 基类和子类之间转换:其中子类指针转换成父类指针是安全的;但父类指针转换成子类指针是不安全的。(基类和子类之间的动态类型转换建议用dynamic_cast) 2. 基本数据类型转换。enum, struct, int, char, float等。static_cast不能进行无关类型(如非基类和子类)指针之间的转换。 3.

牛客 C++刷题day22

血红的双手。 提交于 2019-11-30 10:04:24
switch 语句中执行顺序: 如果某一个case中不加break,那么假如某一次切换到该case则按照语句顺序,执行接下来的所有case句子,直到遇到break,注意,switch语句中的语句顺序非常重要。 原子操作( Atomic operations)不可中断的一个或一系列操作。 标准库里面的string在多线程下并不保证是都是安全的,只提供两种安全机制: 1.多个线程同时读取数据是安全的。 2.只有一个线程在写数据是安全的。 局部变量局部使用是安全的 为什么?因为每个thread 都有自己的运行堆栈,而局部变量是生存在堆栈中,大家不干扰。 2.全局原生变量多线程读写是不安全的 , 全局变量是在堆(heap)中。 3.函数静态变量多线程读写也是不安全的。 4.volatile能保证全局整形变量是多线程安全的么? 不能。 volatile仅仅是告诫compiler不要对这个变量作优化,每次都要从memory取数值,而不是从register 5.InterlockedIncrement保证整型变量自增的原子性 写好多线程安全的法宝就是封装,使数据有保护的被访问到 安全性: 局部变量 > 成员变量 > 全局变 函数的隐含储存类型是extern,函数的形参或变量的储存类型为auto Cin的用法 1.cin简介 cin是C++编程语言中的标准输入流对象,即istream类的对象

C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

偶尔善良 提交于 2019-11-29 13:46:31
C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast 1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 c++除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast,主要运用于继承关系类间的强制转化,语法为: static_cast<new_type> (expression) dynamic_cast<new_type> (expression) const_cast<new_type> (expression) reinterpret_cast<new_type> (expression) 备注:new_type为目标数据类型,expression为原始数据类型变量或者表达式。 《Effective C++》中将c语言强制类型转换称为 旧式转型 ,c++强制类型转换称为 新式转型 。 2. static_cast、dynamic_cast、const_cast、reinterpret_cast static_cast static

C++类型转换总结【转】

强颜欢笑 提交于 2019-11-26 18:34:41
原文 : http://www.cnblogs.com/goodhacker/archive/2011/07/20/2111996.html C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a。 C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。 reinterpret_cast,仅仅重新解释类型,但没有进行二进制的转换。 4种类型转换的格式,如:TYPE B = static_cast(TYPE)(a)。 const_cast 去掉类型的const或volatile属性。 1 struct SA { 2 int i; 3 }; 4 const SA ra; 5 // ra.i = 10; // 直接修改const类型,编译错误 6 SA & rb = const_cast < SA &> (ra); 7 rb.i = 10 ; static_cast 类似于C风格的强制转换。无条件转换,静态类型转换。用于: 1. 基类和子类之间转换:其中子类指针转换成父类指针是安全的

C++ 类型转换【转】

蹲街弑〆低调 提交于 2019-11-26 18:31:39
原文:http://www.cnblogs.com/goodhacker/archive/2011/07/20/2111996.html C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a。 C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。 reinterpret_cast,仅仅重新解释类型,但没有进行二进制的转换。 4种类型转换的格式,如:TYPE B = static_cast(TYPE)(a)。 const_cast 去掉类型的const或volatile属性。 1 struct SA { 2 int i; 3 }; 4 const SA ra; 5 // ra.i = 10; // 直接修改const类型,编译错误 6 SA & rb = const_cast < SA &> (ra); 7 rb.i = 10 ; static_cast 类似于C风格的强制转换。无条件转换,静态类型转换。用于: 1. 基类和子类之间转换:其中子类指针转换成父类指针是安全的