c++中一些强制类型转化

C语言中经常可以见到一些强制类型转化,主要是在变量名前加(类型)。而在c++中与c语言也有一些差异,C++中主要有四种强制类型转化。

  1. static_cast它的主要转化是对于相关类型之间的转化

    int main()

    {

    float a = 1.2;

    int b = static_cast<int>(a);

    cout << b << endl;

    getchar();

    return 0;

    }

2.reinterpret_cast它的主要转化是对于不相关类型之间的转化

int main()

{

int a = 1;

int *p = &a;

int b = reinterpret_cast<int>(p);

cout << b << endl;

getchar();

return 0;

}

3.const_cast 是解除const类型的变量,使之可以改变变量的值

int main()

{

volatile const int a = 1;

int *p = const_cast<int *>(&a);

*p = 2;

cout << a << endl;

getchar();

return 0;

}

4.dynamic_cast是动态转化,它主要作用:1.只能用于含有虚函数的类 2.先检查是否转化成功,若成功转化则转换,若不能就返回0

class A

{

public:

int _a;

virtual void show()

{}

};

class B :public A

{

public:

int _b;

};

void test()

{

A a;

B b;

B *pb =dynamic_cast<B *>(&a);

cout << pb << endl;

}

int main()

{

test();

getchar();

return 0;

}

时间: 2024-11-08 04:53:08

c++中一些强制类型转化的相关文章

强制类型转化(数组名以及数组名取地址)

代码: void main() { int a[4] = {1,2,3,4}; int *ptr0 = &a[0] + 1; int *ptr1 = (int *)(&a + 1); int *ptr2 = (int *)((int)a + 1); int *ptr3 = (int *)(a + 1); cout<<*ptr0<<" "<<ptr1[-1]<<" "<<*ptr2<&l

Delphi强制类型转化和类型约定

强制类型转换时一种技术,通过它能够使编译器把一种类型的变量当做另一种类型. 由于Pascal有定义新类型的功能,因此编译器在调用一个函数时候对形参和实参类型匹配的检查是非常严格的.因此为了能够通过编译器检查,经常需要把一个变量的类型转换为另一个变量的类型.例如:假定要把一个字符类型的值赋给一个byte类型的变量: var c: char; b: byte; begin c:= 'a'; b:= c; //编译器要提示错误 end. 在下面的代码中,强制类型转换把c转换成byte类型,事实上强制类

继承中的对象类型转化以及程序运行步骤

1class Parent{ 2 3          int x=10; 4          public Parent(){ 5               add(2); 6          } 7          void add(int y){ 8               x+=y; 9          }10     }1112     class Child extends Parent{13          int x=9;14          void add(

python输入输出的格式化,用户输入函数,强制类型转化

#coding=utf-8name=raw_input('name:') #raw_input 输入的默认是字符,input默认输入的是输入的格式python3.x中用input=raw_inputage=int(raw_input('age:'))#int()强制类型转换(intster)print type(age)#输出age的类型格式job=raw_input('job:')salary=raw_input('salary:')#''''''代表着多行注释,赋值给变量就是多行变量,最好不

Asp.net 面向接口可扩展框架之类型转化基础服务

新框架正在逐步完善,可喜可贺的是基础服务部分初具备模样了,给大家分享一下 由于基础服务涉及太广,也没开发完,这篇只介绍其中的类型转化部分,命名为类型转化基础服务,其实就是基础服务模块的类型转化子模块 说到类型转化必须要清楚.net的类型,类型都不清楚何来类型转化 1.Primitive类型 1.1 这个概念估计很多人都没听说过,Primitive不是一个新类型,而是.net类型中最基本的一种分类,是基元类型的意思       MS将类型分为三类:Primitive(基元类型).Complex(复

javascript中的隐式类型转化

javascript中的隐式类型转化 #隐式转换 ## "+" 字符串和数字 如果某个操作数是字符串或者能够通过以下步骤转换为字符串的话,+将进行拼接操作. 如果其中一个操作数是对象(包括数组),则首先对其调用`ToPrimitive`抽象操作,该抽象操作再调用`[[DefaultValue]]`,以数字作为上下文. `[1,2]+[3,4]=='1,23,4'` 原因,因为数组的valueOf操作无法得到简单的基本类型,于是它转而调用toString.因此上栗得到的是'1,23,4'

C++中的显式类型转化

类型转化也许大家并不陌生,int i; float j; j = (float)i; i = (int)j; 像这样的显式转化其实很常见,强制类型转换可能会丢失部分数据,所以如果不加(int)做强制转换,严检查的编译会报错,宽检查的编译会报warning.在C语言中,指针是4字节或者8字节的,所以指针之间的强制转换在转换的时候就如同不同的整数类型之间的赋值,问题在于对该指针的使用上,必须确保该指针确实可以做出这样的强制转换.常见的情况是void*到不同的指针类型(比如内存分配,参数传递),cha

Java中byte、short、char、int、long运算时自动类型转化问题

-------------------------------------------------------------------------------------------------- ★★自动(隐式.默认)类型转换与强制(显式)类型转换★★ 1) boolean类型不参与转换 2) 默认转换 A:从小到大 B:byte,short,char --? int --? long --? float --? double C:byte,short,char之间不相互转换,直接转成int类

Swift中的Optional类型 (可选类型)与强制解包 ? !

我们在swift的开发中会经常遇见?和! ,理解这两个符号深层次的内容对我们的开发是相当有利的: 目前网上对swift3.0的教程还相当的少,如果去搜索会发现早期的说法,在定义变量的时候,swift是不会给变量赋值初始值的,所以当你声明一个字符串变量的时候,var string:String   就会被系统报错,但是目前的swift版本却不报错了. 但是你要给一个字符串赋值未nil的时候,var string:String = nil 就一定是错误的   因为nil并不是一个字符串类型,而实际上