关于C++中的类型转换

C++中定义了四种类型转换操作符:static_cast、const_cast、dynamic_cast和reinterpret_cast。

static_cast的用法类似于C语言中的强制类型转换,它可以将一种类型转换为另一种类型:

double n;
int a=static_cast<int>(n);

const_cast用于去除变量的常量属性,将一个const变量转变为非const变量:

const int a=0;
int b=const_cast<int>(a);

dynamic_cast则用于“将指向base class objects的pointers或references转型为指向derived class objects的pointers或references,并得知转型是否成功。”如果转型失败,会以一个null指针(当转型对象是指针)或一个exception(当转型对象是reference)表现出来。

Widget *pw;
update(dynamic_cast<SpecialWidget*>(pw));

void updateViaRef(SpecialWidget& rsw);
updateViaRef(dynamic_cast<SpecialWidget&>(*pw));

reinterpret_cast操作符的转换结果与编译平台息息相关,该操作符不具备移植性。它可以用来转换指针类型:

typedef void (*myFun)(int);
void fun1(int a)
{
	std::cout<<a<<std::endl;
}
int fun2(int a,int c)
{
	std::cout<<c<<std::endl;
	return a;
}
int main()
{
	void(*fun)(int);
	fun=reinterpret_cast<myFun>(fun2);
	fun(5);
	system("pause");
	return 0;
}

由于该操作符不具备移植性,某些情况下这样的转型可能会导致不正确的结果,因此不到万不得已,应该尽量避免函数指针转型。

时间: 2024-11-07 21:54:48

关于C++中的类型转换的相关文章

java中强制类型转换

在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换.因为子类拥有比父类更多的属性.更强的功能,所以父类转换为子类需要强制.那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的. 当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了.在Java中我们可以通过

c 中的类型转换

1. c 中的类型转换是临时对变量值的转换,一般分为: 强制类型转换,自动类型转换.自动转换中一般遵守无论表达式的值是什么样的,系统都自动将其 转换为赋值运算符左边变量的类型. 2. 当 int 赋给char 时,将int 保留低 8 位赋给 char 型变量.当 long 赋给 int 时,将 long 的低16 位保留赋给 int 型变量.

在复数类中自定义类型转换函数实现复数和非复数之间的运算

实现复数+double型数据,并且打印运算后实部上的数据 #include <iostream> using namespace std; class Complex { public: Complex( )//定义默认构造函数初始化复数 { real=0; imag=0; } //使用初始化表初始化复数 Complex(double r, double i):real(r),imag(i){} //定义自定义类型转换函数 operator double() { return real; }

struts中的类型转换(2)

第一步:(这一步和其他一样,这里从简) 依旧是新建一个web project,命名为struts2,导入struts2必须的包.在src目录下新建struts.xml,修改web.xml文件. 第二步: 将index.jsp改名为input.jsp(这个不是必须的,事实上也没有必要,此处只是为了便于称呼).Input.jap的代码如下 Java代码   <%@ page language="java" import="java.util.*" pageEnco

理解C#语言中的类型转换----初学者的理解,请大神指教

一下都是在视频教学中学到后的理解,如果说错了请大神指教 C#语言中的类型转换,就是将某个数据要转换成另一个类型的数据. c#语言中的数据类型主要有: char类型(字符类型): string类型(字符串类型): int类型(整数类型): double类型(小数类型): 类型转换主要分为三种: 1:任意类型转换为string类型: 转换代码书写格式为:待转换的数据.Tostring(): a,这里的待转换的数据指的是需要转换的数据或变量.后面的Tostring():是固定书写. 转换完成后的返回类

wxWidgets中的类型转换

1int  to wxString:     wxString str = wxString::Format(wxT("%i"),myInt); 2wxString to int :     int i;  i = wxAtoi(str); 3 string to wxString:     std::string stlString = "sdfas"; wxString mystr(stlString .c_str(),wxConvUTF8); 4 wxStri

Java中数据类型转换

1.Java的数据类型分为三大类 布尔型,字符型和数值型 其中数值型又分为整型和浮点型 2.Java的变量类型 布尔型 boolean 字符型 char 整型    byte,short,int,long 浮点型 float,double 3.数据类型转换 Java中数据类型转换分为三种,简单数据类型转换,字符串与其他类型转换,其他实用数据类型转换 (1)简单数据类型转换 在Java中,整型,实型,字符型被视为简单数据类型. 这些类型级别从低到高:(byte,short,char)-> int

大龙嘚吧嘚之“C#中的类型转换”

首先,谷歌之: 谷歌答案一:http://blog.itpub.net/14466241/viewspace-700102/ 使用C#一个最常见的问题便是各种类型间的转换. 我们知道,C#中的类型分为值类型和引用类型两大类.但是,有关它们间各自转换的细节描述在网上很少得到详细的回答.现在,我结合搜索到的部分资料整理如下: 1,问题 c#中类型转换的有两种,()转换和convert转换. 我想知道的是这两个转换的区别 还有就是()转换我用了发现好多不能转换过来,但是convert是万能转换的,那什

JavaScript中的类型转换(二)

说明: 本篇主要讨论JavaScript中各运算符对运算数进行的类型转换的影响,本文中所提到的对象类型仅指JavaScript预定义的类型和程序员自己实现的对象,不包括宿主环境定义的特殊对象(比如浏览器定义的对象) 上一篇中讨论了JavaScript中原始类型到原始类型的转换,原始类型到对象类型的转换和对象类型到原始类型的转换,这里先提出一个问题 var a = undefined; if(a){ console.log('hello'); }else{ console.log('world')

JavaScript中的类型转换(一)

前言 JavaScript是一种非常灵活的弱类型的语言,它的灵活性的一方面体现在其繁杂多样的类型转换.比如当JavaScript期望使用一个布尔值的时候(比如if语句中)你可以提供任一类型的值,JavaScript会按照需要自行转换类型:当使用==操作符比较两个类型值的时候,也会对两个操作数按需进行转换,同样的事情也发生在使用+,>和<等操作符时.这些灵活繁杂的转换往往会使初学者不知所措,本文对JavaScript的类型转换做一个总结. JavaScript中的类型分类 JavaScript中