首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++】类型转换

一、C语言中的类型转换C 语言中,如果 赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化 , C 语言中总共有两种形式的类型转换...: 隐式类型 转换和显式类型转换 。...= (int)pi; return 0; } C风格的转换格式很简单,但是有不少缺点的: 1....显式类型转换将所有情况混合在一起,代码不够清晰 因此 C++ 提出了自己的类型转化风格,注意 因为 C++ 要兼容 C 语言,所以 C++ 中还可以使用 C 语言的 转化风格 。...---- 二、C++中的类型转换 标准 C++ 为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符: static_cast、reinterpret_cast、const_cast、dynamic_cast

13420

c++】类型转换

C语言的类型转换C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换...int address = (int)p; printf("%x,%d\n", p, address); return 0; } ---- C++需要四种类型转换 C风格的转换格式很简单,但是有不少缺点的...显式类型转换将所有情况混合在一起,代码不够清晰 因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。...C++引入四种类型装换操作符:static_cast、reinterpret_cast、const_cast、dynamic_cast ---- C++强制类型转换 static_cast static_cast...---- 总结 1、C++中的4种类型转换分别是:static_cast,reinterpret_cast、const_cast、dynamic_cast 2、4种类型转换的应用场景: static_cast

18420
您找到你想要的搜索结果了吗?
是的
没有找到

C++类型转换

进行上行转换,也就是把子类的指针或引用转换成父类表示,这种转换是安全的; 当进行下行转换,也就是把父类的指针或引用转换成子类表示,这种转换是不安全的,也需要程序员来保证; 用于基本数据类型之间的转换,如把...int转换成char,把int转换成enum等等,这种转换的安全性需要程序员来保证 把void指针转换成目标类型的指针,是及其不安全的; #include "iostream"; using namespace...转换后的类型必须为指针或引用 //Parent ppp = dynamic_cast(c); return 0; } 结果: ?...//int j = const_cast(i); return 0; } reinterpret_cast 允许将任何指针类型转换为其它的指针类型;听起来很强大,但是也很不靠谱。...它主要用于将一种数据类型从一种类型转换为另一种类型

69620

C++类型转换

将一种算数类型的值赋给另一种算数类型的变量时,C++++将进行转换 表达式中包含不同类型时 将参数传递给函数时 程序自己进行的转化叫自动转换,如果不理解这些转换,有些结果是无法理解的。...c4初始化时,编译器并不会通过,因为在编译器看来,x是一个变量,他并不知道变量的大小,因此不可以转换。...不同数据类型尽心运算时候,也会进行一些转换,例如将int和float相加时,当涉及两种类型时,较小的类型会被转为较大的类型 VS2019的C++语言标准默认为C++14。...这里总结一下C++自动转换的规则 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。...如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度 强制转换 C语言转换(typename) value C++转换 typename (name) 强制类型转换不会改变转换变量本身

16430

C++】类型转换

一、C语言的类型转换C语言中,如下场景会发生类型转换: 赋值运算符左右两侧类型不相同。 形参与实参类型不匹配。 返回值类型与接收返回值类型不一致。...C语言中一共有两种形式的类型转换: 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败。 显式类型转化:需要用户自己手动进行类型转换。...显示的强制类型转换 int address = (int)p; printf("%x, %d\n", p, address); } ---- 二、C++ 的类型转换 C风格的转换格式很简单,但是存在一些缺点...基于C风格类型转换存在的一些缺点,C++ 提出了自己的类型转化风格,具体来说引入了四种命名的强制类型转换操作符,它们加强了类型转换的可视性:static_cast、reinterpret_cast、const_cast...---- 三、C++ 强制类型转换 1、static_cast static_cast 适用于隐式类型转换的场景,即适用于相似类型之间的转换;如果我们使用 tatic_cast进行不相关类型之间的转换

18120

C++】类型转换

类型转换 一、C语言中的类型转换C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换...二、C++强制类型转换 标准 C++ 为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符: static_cast、reinterpret_cast、const_cast、dynamic_cast...它对应的是C语言的隐式类型转换。...这是因为 cout 对 &a 识别的时候匹配错了,我们只需要将 &a 强转成如下即可: 如果以上的转换我们使用C语言的强制类型转换可以吗?...那么C++为什么要使用这几种类型转换的方式呢?

7310

C++:16---强制类型转换类型转换

旧式的强制类型转换 在早期C/C++中,显式地进行强制类型转换有以下两种形式: type (expr) ; //函数形式的强制类型转换 (type) expr; //...C语言风格的强制类型转换 比如: char c = '12'; int b = (int)c; float f = float(b); C++的新式强制类型转换...type是转换的目标类型 避免强制类型转换 强制类型转换干扰了正常的类型检查,所以强烈建议程序员避免使用强制类型转换 这个建议对于reinterpret_cast尤其使用,因为此类类型转换总是充满了风险...一、static_cast 功能:用来强迫隐式类型转换,或称为显式的类型转换 static_cast还可以将一个左值转换为右值引用 例如: 将非const对象转换为const对象(但是不能将底层const...转换,编译器无警告 当我们把较大的算术类型赋值给较小的类型时,一般的强制类型转换编译器会发出警告 但是当我们使用static_cast后,编译器就不会报出警告 演示案例 static_cast对于编译器无法自动执行的类型转换也非常有用

1.9K20

C++的类型转换

C语言中转换类型的方法一般是使用强制转换,就如下列的转换方法 int i = ; void *v = (void *)i; 在C++中类型转换大致有四种: 1. dynamic_cast...类型转换 (1) dynamic_cast是在运行时检查的,属于动态转换; (2) 一般用于基类和派生类之间的相互转换。...(1) static_cast会在编译的过程中进行安全性检查, 相对与dynamic_cast是静态转换; (2) 一般用于内置数据类型转换和通常的类之间的转换。...int i = ; double d = static_cast(i); 3. const_cast类型转换 主要是用于去掉指针和引用的const和volatile类型。...(这句话是C++编程思想中的原话) (2) 用于完全没有关系指针或引用之间的转换,比如浮点型指针转整型指针; (3) 相当于强制转换,不会考虑安全检查问题,这是需要值得注意的,不像dynamic_cast

76110

C++的类型转换

1 类型转换名称和语法 C 风格的强制类型转换(Type Cast)很简单,不管什么类型转换统统是: TYPE b = (TYPE)a C++ 风格的类型转换提供了4 种类型转换操作符来应对不同场合的应用...4种类型转换的格式: TYPE B = static_cast (a) 类型转换一般性介绍 1)static_cast() 静态类型转换,编译的时c++编译器会做类型检查; 基本类型转换...但是不能转换指针类型 2)若不同类型之间,进行强制类型转换,用reinterpret_cast() 进行重新解释 3)一般性结论: C语言中 能隐式类型转换的,在c++中可用 static_cast...因C++编译器在编译检查一般都能通过;C语言中不能隐式类型转换的,在c++中可以用 reinterpret_cast() 进行强行类型 解释。...在c++中可以用 static_cast()进行类型转换 //C++编译器在编译检查一般都能通过 //c语言中不能隐式类型转换的,在c++中可以用 reinterpret_cast() 进行强行类型

1.5K20

C++强制类型转换

大家好,又见面了,我是全栈君   C++中的强制类型转换虽然兼容C语言中的强制类型转换,但是不建议在C++中使用C语言风格的强制类型转换。...C++中的强制类型转换共有4种:static_cast,dynamic_cast、const_cast、reinterpret_cast. static_cast 1....使用范围   (1)基本数据类型之间的转换,如int->double;     int a = 6;     double b = static_cast(a);   (2)派生体系中向上转型...我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话。...&c)); //前两个的输出值是相同的,最后一个则会在原基础上偏移4个字节,这是因为static_cast计算了父子类指针转换的偏移量,\ 并将之转换到正确的地址(c里面有m_a,m_b

1.3K10

C++的类型转换

目录 1.C语言中的类型转换 2.C++为什么需要四种类型转换 3.C++强制类型转换 4.问答 ---- 1.C语言中的类型转换C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,...或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。...p, address); return 0; } 2.C++为什么需要四种类型转换 C风格的转换格式很简单,但是有不少缺点的: ①隐式类型转化有些情况下可能会出问题:比如数据精度丢失 ②显式类型转换将所有情况混合在一起...C++觉得它不够好,自己在C语言的基础上,重新搞了一下C++自己的四种类型转换。需要注意的是因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。...3.C++强制类型转换 标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符: static_cast、reinterpret_cast、const_cast、dynamic_cast

84030

C语言-强制类型转换

(void *s) { char * str = (char *)s; printf("str:%s\n",str); } void main(void) { char * strIn = "Linux.../a.out str:Linux is my world root@ubuntu:~/project# cat 2.c 隐式类型转换 我们写代码的时候,在类型转换的时候,通常在前面加上类型的名字,如果不加的话...,不同的类型进行运算,编译器自己去判断如何进行转换,这种方式就是隐式类型转换。...通常在表达式中存在多个数据类型时发生。在这种情况下,类型转换类型提升)发生以避免数据丢失。 变量的所有数据类型都升级为具有最大数据类型的变量的数据类型。.../a.out x = 107, z = 108.000000 显式类型转换 此过程也称为类型转换,它是用户定义的。在这里,用户可以键入强制转换结果以使其具有特定的数据类型

2.3K30

C++ 强制类型转换和赋值中的类型转换

强制类型转换C语言的形式: (类型名)(表达式) 比如: (double)a //把a转换为double类型 (int)(a+b) //把a+b的值转换为整型 需要注意的是:如果强制类型转换的对象是一个变量...(int)(a+b) //把a+b的值转换为整型 (int)a+b //把a的值转换为整型,然后加b C++新增加的形式: 类型名(表达式) 该形式的类型名不需要括括号,但是待转换的对象不管是变量还是表达式都需要用括号括起来...i = (int)x; cout<<"x = "<<x<<",i = "<<i<<endl; getchar(); return 0; } 运行结果: x = 3.6,i = 3 赋值过程中的<em>类型</em><em>转换</em>...如果赋值运算符两侧的<em>类型</em>不一致,但都是数值型或字符型,在赋值时可以自动进行<em>类型</em><em>转换</em>。...字符型与数值型的说明: 在<em>C</em>++基本的数据<em>类型</em>中,可以分为四类:整型,浮点型,字符型,布尔型。其中数值型包括 整型与浮点型;字符型即为char。

1.5K10

C++】类型转换 ③ ( 重新解释类型转换 reinterpret_cast | 指针类型数据转换 )

一、重新解释类型转换 reinterpret_cast C++ 静态类型转换 static_cast 可以完成 数据类型 转换 , 如 将 int 转为 double , 将 bool 转为 char..., 等场景 ; 但是 对于 指针数据类型 , 就不能再使用 静态类型转换 static_cast ; 1、指针数据类型转换 - C 语言隐式类型转换报错 ( 转换失败 ) 先讨论下 C 语言的 隐式类型转换...system("pause"); return 0; }; 执行结果 : 2、指针数据类型转换 - C 语言显示类型强制转换 ( 转换成功 ) 使用 C 语言显示类型强制转换 , 可以将 char...}; 执行结果 : 3、指针数据类型转换 - C++ 静态类型转换 static_cast ( 转换失败 ) 使用 C++ 静态类型转换 static_cast , 将 char* 类型指针 转为 int...、C 样式强制转换或函数样式强制转换 //p2 = p1; // 使用 C 语言的隐式转换 // 可以实现 指针类型 转换功能 //p2 = (int*)p1; // 使用 C++ 静态类型转换

31410

C++】类型转换 ② ( C++ 静态类型转换 static_cast | C 语言隐式转换弊端 | 代码示例 )

一、静态类型转换 static_cast 1、C++ 静态类型转换 static_cast C++ 中的 static_cast 静态类型转换 , 是使用频率最高的 类型转换 操作符 , 使用 该 静态类型转换...时 , 在编译器进行静态编译时 , C++ 编译器会进行 类型检查 , 如果 出现类型错误 , 编译时会进行提示报错 ; 与之相对的事 , C 语言中如果可以进行隐式类型转换 , 如果使用 C++ 的静态类型转换...// 静态编译时 , C++ 编译器会进行 类型检查 // C 语言中如果可以进行隐式类型转换 , 如果使用 C++ 的静态类型转换 // 此时在 C++ 编译器 编译时会进行类型检查 , 如果有错编译不通过...C 语言类型转换 */ // C 语言中 隐式类型转换 赋值时自动转换 int num = pi; // C 语言中 显示类型转换 手动强制转换 int num2 = (int)pi;...C++ 类型转换 */ // C++ 中的 静态类型转换 // 静态编译时 , C++ 编译器会进行 类型检查 // C 语言中如果可以进行隐式类型转换 , 如果使用 C++ 的静态类型转换

18910

c++ 默认类型转换

对于C/C++语言来说,在通常情况下语句和表达式的操作通常只使用一种类型的变量和常量。...但在实际的开发中,往往会有不同类型的变量之间进行运算,为了满足这样的代码需求,通常在编译器中会设置不同类型自动类型转换,以完成相应的运算。...实际上当不同类型的变量做运算时,编译器为了提高计算的精度,会进行数据的类型自动转换,按照下图的方式进行转换。...自动数据类型转换的规则: 1.横向红色的箭头表示的是无条件转换,float类型数据运算时,将其转换为double类型进行运算,运算结果再转换为float;short和char类型数据在做运算时,首先转换为...函数重载会进行类型推演,但是对于compare(10.1,20.2)参数首先会自动转换为double类型,但是进行重载时,如上图类型转换图中没有一个规定对于double的数据到底转换为int还是float

58220

C++11显示类型转换

1.隐式类型转换的问题 隐式类型转换C++一个让人又爱又恨的特性,使用方便,但可能会降低代码可读性,甚至会造成一些十分隐晦的错误。...随着项目代码规模变大,这种由隐式类型转换导致的隐晦错误会越埋越深,越来越难以发现。...2.显示类型转换 为了阻止容易导致隐晦错误的隐式类型转换C++11引入了explicit关键字作用于自定义的类型转换操作符的功能,禁止隐式类型转换。...= 0; } cout << "myInt1+myInt2=" << myInt1 + myInt2 << endl; //编译出错 当使用explicit关键字修饰bool<em>类型</em><em>转换</em>操作符时,隐式<em>类型</em><em>转换</em>将会被阻止...注意,显式<em>类型</em><em>转换</em>有一个例外。如果表达式被用作条件,仅限<em>转换</em>到bool,那么显式的operator bool()也可以隐式地进行。

84640
领券