dynamic_cast

5、【C++基础】强制类型转换

我是研究僧i 提交于 2020-01-09 04:56:54
C++ 强制类型转换 在C++语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于强制类型转换的。我们逐一来介绍这四个关键字。 1、static_cast: 在C++语言中static_cast用于内置基本数据类型型的强制转换,强制将一种数据类型转换为另一种数据类型。例如将整型数据转换为浮点型数据。 【示例】C语言所采用的类型转换方式: 1 int a = 10; 2 int b = 3; 3 double result = (double)a / (double)b; 上例中将整型变量a和b转换为双精度浮点型,然后相除。在C++语言中,我们可以采用static_cast关键字来进行强制类型转换,如下所示。 【示例】static_cast关键字的使用: 1 int a = 10; 2 int b = 3; 3 double result = static_cast<double>(a) / static_cast<double>(b); 在本例中同样是将整型变量a转换为双精度浮点型。采用static_cast进行强制数据类型转换时,将想要转换成的数据类型放到尖括号中,将待转换的变量或表达式放在元括号中,其格式可以概括为如下形式: 1 static_cast <类型说明符> (变量或表达式

C++中的显示类型转换

ε祈祈猫儿з 提交于 2020-01-04 05:40:24
C++中显示转换也成为强制类型转换(cast),有四种:static_cast、dynamic_cast、const_cast、reinterpret_cast。命名的强制类型转换符号一般形式如下: cast_name<type>(expression); 以下分别介绍 一、static_cast 任何具有明确定义的类型转换,只要不包含底层const都可以使用static_cast。好吧这句话我不是很懂,换句话:编译器隐式执行的任何类型转换都可以由static_cast显示完成。也就是说,两类型之间可以发生隐式的转换,就可以用static_cast显示转换,有点意思。但要知道的是C++基本类型的指针之间不含有隐式转换(void*除外、const的有些也是可以的),需要 显示转换 。什么意思?如下: double d=3.14; int i=d; //编译器的隐式转换,等价于下面这条语句 int i=static_cast<int>(d); /*指针之间的转换*/ char str[]="good"; char *ptr=str; int *p=static_cast<int *>(ptr); //编译错误,两者之间的转换要显式,如下 int *p=(int *)(ptr); 仅当类型之间可隐式转换时(除类层次见的下行转换以外),static_cast的转换才是合法的,否则将出错。

5、【C++基础】强制类型转换

冷暖自知 提交于 2020-01-04 05:39:39
C++ 强制类型转换 在C++语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于强制类型转换的。我们逐一来介绍这四个关键字。 1、static_cast: 在C++语言中static_cast用于内置基本数据类型型的强制转换,强制将一种数据类型转换为另一种数据类型。例如将整型数据转换为浮点型数据。 【示例】C语言所采用的类型转换方式: 1 int a = 10; 2 int b = 3; 3 double result = (double)a / (double)b; 上例中将整型变量a和b转换为双精度浮点型,然后相除。在C++语言中,我们可以采用static_cast关键字来进行强制类型转换,如下所示。 【示例】static_cast关键字的使用: 1 int a = 10; 2 int b = 3; 3 double result = static_cast<double>(a) / static_cast<double>(b); 在本例中同样是将整型变量a转换为双精度浮点型。采用static_cast进行强制数据类型转换时,将想要转换成的数据类型放到尖括号中,将待转换的变量或表达式放在元括号中,其格式可以概括为如下形式: 1 static_cast <类型说明符> (变量或表达式

C++ 详解dynamic_cast

瘦欲@ 提交于 2019-12-15 00:17:38
dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换就能在运行时调用派生类的虚函数。 前提条件:当我们将dynamic_cast用于某种类型的指针或引用时,只有该类型含有虚函数时,才能进行这种转换。否则,编译器会报错。 dynamic_cast运算符的调用形式如下所示: dynamic_cast<type*>(e) //e是指针 dynamic_cast<type&>(e) //e是左值 dynamic_cast<type&&>(e)//e是右值 e能成功转换为type*类型的情况有三种: 1)e的类型是目标type的公有派生类:派生类向基类转换一定会成功。 2)e的类型是目标type的基类,当e是指针指向派生类对象,或者基类引用引用派生类对象时,类型转换才会成功,当e指向基类对象,试图转换为派生类对象时,转换失败。 3)e的类型就是type的类型时,一定会转换成功。 定义如下基类和派生类: #include<string> #include<iostream> usingnamespacestd; classBase{ public: Base():str(nullptr) {} Base(strings):str(s) {} virtualvoidprint()

C/C++数据类型判断与转换

假如想象 提交于 2019-12-05 22:14:51
     最近总想着写一些通用的代码,然集中收纳到自己的私人库中去,这些代码期望能与公司基础数据结构无关。然而这比较难,因为无论如何,必需要用到一些结构 化的东西,这些与基础引擎等有关,必需极度抽象才可以做到层层分离,于是我想将分两个层级,一级模版代码,只支持标准C++的东西,存入库中;二级代码,这些作为普通常函数,将会引擎一些引擎级别的数据,尽量通用;三级则是应用实例代码。   如此一来必需有类型判断和通用的结构,以下收集一些数据类型处理的的方法。 一、typeid   typeid 和 sizeof一样是个运算符,eg. int a; if(typeid(a) == typeid(int)) cout<<"int";   另外 typeid( int).name() 返回值 为string 或者char*,可据此检测类型。 二、类型转换   1、隐式转换,当数据参与运算时,不同类型将被自动转换                                 数据类型排名 long double double float unsigned long long int long long int unsigned long int long int unsigned int int     char、short 和 unsigned short 值自动升级为 int 值;    

static_cast和dynamic_cast详解

一笑奈何 提交于 2019-12-05 19:13:41
注:从图中可以看出,派生类不仅有自己的方法和属性,同时它还包括从父类继承来的方法和属性。当我们从派生类向基类转换时,不管用传统的c语言还是c++转换方式都可以百分百转换成功。但是可怕是向下转换类型,也就是我们从基类向派生类转换,当我们采用传统的C语言和c++转换时,就会出现意想不到的情况,因为转换后派生类自己的方法和属性丢失了,一旦我们去调用派生类的方法和属性那就糟糕了,这就是对类继承关系和内存分配理解不清晰导致的。好在c++增加了static_cast和dynamic_cast运用于继承关系类间的强制转化 一、static_cast和dynamic_cast使用方式 static_cast< new_type >(expression) dynamic_cast< new_type >(expression) 备注:new_type为目标数据类型,expression为原始数据类型变量或者表达式。 二、static_cast详解: static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为new_type类型,用来强迫隐式转换如non-const对象转为const对象,编译时检查,用于非多态的转换,可以转换指针及其他,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。

“UnsatisfiedLinkError” appears when “dynamic_cast” is used in Android NDK

匿名 (未验证) 提交于 2019-12-03 08:52:47
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I am new in the developing for Android and I faced with next problem: when I using C++ code that uses "dynamic_cast" expressions - "UnsatisfiedLinkError" appears when I am starting my application on an emulator. But when I run application without it - all works OK( I mean without any errors to LogCat ) I tried to run it on Android 2.3.3. I used android-ndk-r7b. My Application.mk: APP_OPTIM := debug APP_ABI := armeabi APP_STL := gnustl_static APP_MODULES := native_lab My Android.mk: LOCAL_PATH := $ ( call my - dir ) include $ (

“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

【C++】对象转换显示转换

匿名 (未验证) 提交于 2019-12-02 23:36:01
版权声明:藏经阁 | 玄苦 | 陈国林 https://blog.csdn.net/cgl1079743846/article/details/90691158 һ. static_cast 用法:static_cast (expression) 说明:该运算符把expression转换为typeid类型,但没有运行时类型检查来确保转换的安全性。 用途 用于类层次结构中基类和派生类之间指针或者引用的转换。up-casting (把派生类的指针或引用转换成基类的指针或者引用表示)是安全的;down-casting(把基类指针或引用转换成子类的指针或者引用)是不安全的。 用于基本数据类型之间的转换,如把int转换成char,这种转换的安全性也要由开发人员来保证。 可以把空指针转换成目标类型的空指针(null pointer)。 把任何类型的表达式转换成void类型。 注意: static_cast不能转换掉expression的const、volitale或者__unaligned属性。 二. dynamic_cast 用法:dynamic_cast (expression) 说明:该运算符把expression转换成typeid类型的对象。typeid必须是类的指针、类的引用或者void*。如果typeid是类的指针类型,那么expression也必须是指针

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