c++四种类型转换操作符简要总结

1.  static_cast<target>(expression)

  • 可用于存在继承关系的类指针/引用之间的向上向下转换。执行向下转换时没有安全检查(区别于dynamic_cast),所以如果实际类型与目标类型不符合,编译虽然可以通过,但运行时的后果未定义。
  • void*指针转换为实际的指针
  • 其他基本类型的隐式转换以及反方向的转换,如:int <-> double

2.  dynamic_cast<target>(expression)

  • 只能用于target为类指针或者引用,或者void*的情形
  • 可以用来在基类和派生类之间的向上或者向下转换。(注:向下转换时,基类必须含有虚函数,因为dynamic_cast需要查询RTTI,而RTTI存放于虚函数表中)
  • 不能用在钻石型结构的非虚多重继承的跃级转换(因为非虚继承的越级转换是有歧义的)
  • 目标类型是指针时,如果转换失败,则返回空指针;目标类型为引用时,失败时抛出bad_cast异常

3. const_cast<target>(expression)

  • 可以用于去掉或者加上const或者volatile属性
  • 最常见的使用方式是,调用某些要求非const参数的函数,而该函数实际上并不修改该参数,则可以使用该操作符为该参数去掉const。若使用该操作符将const对象的const属性去掉并加以修改,则会导致不可预见的错误。
  • 只有该操作符可以去掉const属性,即使reinterpret_cast也不行

4. reinterpret_cast<target>(expression)

  • 危险的转换符,类型之间的直接转换,应该尽量避免使用。

c++四种类型转换操作符简要总结

时间: 2024-10-06 01:10:21

c++四种类型转换操作符简要总结的相关文章

C++ 四种类型转换操作符

一.C风格类型转换操作符 (type) expression 例子: int firstNumber, secondNumber; double result = ((double)firstNumber)/secondNumber: 二.C++类型转换操作符 1.static_cast  在功能上基本上与 C 风格的类型转换一样强大,含义也一样. double result = static_cast<double>(firstNumber)/secondNumber; 它也有功能上限制.例

c++的四种类型转换

C++中四种类型转换方式 类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些.还有一个缺点就是,c风格的转换不容易查找,他由一个括号加上一个标识符组成

[转]C++中四种类型转换符的总结

C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression)    reinterpret_cast操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换,即二进制值没有变.例如: int n=9; double d= reinterpret_cast< double > (n); 在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复

C++四种cast操作符

C++的四种cast操作符的区别发信站: 水木社区 (Thu Jan 26 21:15:16 2006), 站内 声明 by NetMD:并非我的原创,来自互联网,且是两篇帖子的合集,个人觉得这样才比较完备 ---------------------------------------------------------------------- Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A

C++ Primer笔记2_四种类型转换_异常机制

1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式执行的任何类型转换都可以由static_cast完成 当一个较大的算术类型赋值给较小的类型时,可以用static_cast进行强制转换. 可以将void*指针转换为某一类型的指针 可以将基类指针强制转换为派生类指针,但是不安全. 无法将const转化为nonconst,这个只有const_cast才可以办得到 举例:

C++引用,常量优化,四种类型转换符

变量引用是变量的别名,常量引用要加const,引用与被引用的东西是同一样. #include <string> #include <ctype.h> #include <vector> #include <iostream> #include <fstream> // using declarations states our intent to use these names from the namespace std using names

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

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

C++四种类型转换

C++有4种类型转换,reinterpret_cast, static_cast, dynamic_cast 和 const_cast reinterpret_cast reinterpret_cast 可以将一个指针转换为任意其它类型的指针或int,或反之亦可. 可以在互不相关的类之间进行指针转换,它只是简单地将一个指针的二进制数据复制到另一个指针,对指针指向的内容不做任何检查或转换. class A {}; class B {}; A * a = new A; B * b = reinter

C++的四种cast操作符的区别--类型转换

Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式.为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符.比如,为了转换一个类型为doubole的浮点数的指针到整型:代码:int i;double d; i = (int) d;或者: i = int (d); 对于具有标准定义转换的简单类型而言工作的很好.然而,这样