C++转型操作符

虽然C++兼容旧式C语言转型的方式,但推荐统一使用C++新型的4个转型操作符:static_cast, const_cast, dynamic_cast, reinterpret_cast.

1. static_cast

c旧时转型形式应采用static_cast来转换,其基本上具有与c旧式转型的功能:

(type) expression     →→     static_cast<type> (expression)

2. const_cast

改变表达式中的常量性或变易性,常见用途是将某个对象的常量性去除。

class Circle {...};
void resize(Circle* p);
Circle a;
const Circle& b = a;
resize(&b);  //执行出错
resize(const_cast<Circle*>(&b)); //执行成功

3. dynamic_cast

用来安全的执行继承体系中的向下转型。将指向基类对象的指针或引用转化为子类对象的指针或引用,若转换失败,则会返回null指针(转换对象是指针)或一个exception异常(转换对象是引用)。

4. reinterpret_cast

常用于转换函数指针类型。此操作符与编译平台相关,不具备移植性,因而不推荐使用。

typede int (*Func) ();
Func funcPtr;
void doSomething();
funcPtr = &doSomething; //错误,返回类型不符合
funcPtr = reinterpret_cast<Func>(&doSomething) // 编译正常

原文地址:https://www.cnblogs.com/share-ideas/p/10664923.html

时间: 2024-10-10 00:30:47

C++转型操作符的相关文章

More Effective C++ 条款2 最好使用C++转型操作符

1. C转型操作几乎允许将任何类型转为任意其他类型,由此造成极大地不安全性. 2. C转型操作对所有种类的转型使用一种语法,降低了代码的可读性.而C++的转型操作符则适用于更集中(狭窄)的目的. 3. C++的转型操作符: static_cast:几乎与C旧式转型相同的威力与意义以及相同的限制 const_cast:用于去除某个对象的常量性 用法:A* a=const_cast<A*>(&a1)       //a1是与A类型的对象 注意: 1)可以使用一个const对象经过const

C++中的四种转型操作符

在详细介绍C++中的四种转型操作符之前,我们先来说说旧式转型的缺点: ①它几乎允许将任何类型转换为任何其他类型,这是十分拙劣的.如果每次转型都能够更精确地指明意图,则更好. ②旧式转型难以辨识.旧式转型的语法结构是由一对小括号加上一个对象名称组成,而小括号和对象名称在C++的任何地方都有可能被使用. 为解决C旧式转型的缺点,C++导入了4个新的转型操作符:static_cast.const_cast.dynamic_cast.reinterpret_cast.下面我来一一分析这四种转型操作符.

C++ 转型操作符 【1】static_cast 和const_cast

[c++转型操作符] goto语句一直被视为程序设计上的"贱民",低阶转型动作它有的一拼,虽然它任然能够苟延残喘,不过,旧式的C转型方式并非是唯一选择. 旧式转型的语法结构: 由一对小括号加上一个对象名称(标识符)组成,而小括号和对象名称在C++的任何地方都能够被使用,因此,我们简直无法回答最基本的转型相关问题"这个程序张有使用过任何转型动作吗?" <span style="font-size:18px;">(type)express

条款2:最好使用C++转型操作符

旧式的C语言转型方式,是存在缺点的,主要在一下两个方面:1.它几乎允许你将任何类型转换为任何其它类型.2.转型是难以识别的.旧式转型的语法结构是由一对小括号加上一个对象名称组成,而小括号和对象名称在C++的任何地方都有可能被使用. 为了解决C旧式转型的特点,C++引入4个新的转型操作符(cast operators):static_cast, const_cast, dynamic_cast和reinterpret_cast. static_cast基本上拥有与C旧式转型相同的威力与意义,以及相

条款二:最好使用c++转型操作符

一.static_cast基本上拥有与c旧式转型相同的威力与意义,以及相同的限制,不能够移除表达式的常量性,const_cast负责这个功能 二.const_cast用来改变表达式中的常量性,如果将const_cast用于上述以外的用途,那么转型动作会被拒绝,主要是将某个变量的常量性去除掉,因为非const实参可以赋值给常量形参 普通形参加不加const限定符对实参没有影响,引用形参和指针形参前面没有const限定符时,实参必须是非const的,而前面有const限定符时对实参也没有什么影响.

条款2. 最好使用C++转型操作符

C++提供了four cast operators: static_cast,const_cast,dynamic_cast and reinterpret_cast. 1. static_cast 用来进行基本类型数值间的转换,例如:int --- char,安全由程序员进行控制. 不能用于无关类型间指针间的转换,例如:int* --- double* 编译出错. 将null pointers – other pointers. 基类和派生类之间指针或者引用的转换.up-casting (把派

Effective C++:条款27:尽量少做转型动作

(一)C风格旧式转型: (T)expression T(expression) (二)C++提供四种新式转型: (1)const_cast<T>(expression):去除表达式的常量性,是C++中唯一能做此操作的转型操作符. (2)dynamic_cast<T>(expression):主要用来执行"安全向下转型",即用来决定某对象是否归属继承体系中的某个类型.它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作. (3)reinterp

C++转型

C风格的转型动作 (T) expression // 将expression转型为T ``` T(expression) // 将expression转型为T 两种形式并无差别,纯粹是小括号的的摆放位置不同而已. C++的转型动作 C++提供了四种新式转型(常常被称为new-style或C++-style casts) const_cast (expression) dynamic_cast (expression) reinterpre_cast (expression) static_cas

C++转型小结

转型一直不陌生,在java里面用的也比较多,直接"()"一下就搞定了,在C++中,部分转型也可以直接用这种方法搞定,在effective c++中,作者将其归纳为旧式转型. 既然有旧式,那就有新式,新式是形如xx_cast的东西.cast比较纠结,虽然平常用的也还算多,但一直没总结,也就老忘了各自区别和具体用法,接下来大概总结一下. const_cast 用来移除对象的常量性(是移除!不是添加),也是唯一具有此功能的转型操作符(C++style). dynamic_cast 用来执行安