c++static_cast(c++static_cast和dynamic_cast区别)
本篇文章给大家谈谈c++static_cast,以及c++static_cast和dynamic_cast区别对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、static_cast的详细含义(简要说明一下)
- 2、c语言中static_cast 是什么?干什么用的?
- 3、C++中static_cast和reinterpret_cast的区别?
- 4、c++,static_cast
- 5、c++中“static_cast”有什么用?
- 6、c语言的cast()怎么用,新手求教
static_cast的详细含义(简要说明一下)
static_cast 在编译时使用类型信息执行转换, 在转换执行必要的检测(诸如指喊乎针越界计算, 类迅手型检查). 其操作数相对是安全的.
功能与(int)等强制转换类似。但是多了一些必要的检查机制。
int a = 1;
void *p = a;
cout郑昌悉*(int*)p;
cout*static_castint*(p);
效果相同。
但是如果是
cout*static_castchar*(p);
就会报错。
但是double a = 1.2;
再如上面,都会正确。
因为double 可以转int只是有误差而已。
语法还是正确的。
c语言中static_cast 是什么?干什么用的?
静态类型转换关键颤州字,是 C++ 编译器的新特性,C 编译器唤纯不支持这个关键字的;
主要用和洞咐于将表达式转换成另一个数据类型,这个转换会经过编译器的合法性检查;
[img]C++中static_cast和reinterpret_cast的区别?
static_casttype(expression)
例如,假设你想把一个int转换成double,以便让包含int类型变量的表达式产生出浮点数值的结果。如果用C风格的前基神类型转换,你能这样写:
int firstNumber, secondNumber;
...
double result = ((double)firstNumber)/secondNumber;
如果用上述新的类型转换方法,你应该这样写:
double result = static_castdouble(firstNumber)/secondNumber;
这样的类型转换不论是对人工还是对程序都很容易识别。
static_cast在功能上基本上与C风格的类型转换一样强大,含义也一样。它也有功能上限制。例如,你不能用static_cast象用C风格的类型转换一样把struct转换成int类型或者把double类型转换成指针类型.
关于reinterpret_cast,使用这个操作符的类型转换,其的转换结果几乎都是执行期定义(implementation-defined)。因此,使用reinterpret_casts的代码很难移植。
reinterpret_casts的最普通的用途就是在函数指针类型之间进行转换。例如,假设你有一个函数指针数组:
typedef void (*FuncPtr)(); // FuncPtr is 一个指向函数
// 的指针,该函数没有参数
// 返回值类型为void
FuncPtr funcPtrArray[10]; // funcPtrArray 是一个能容纳
// 10个FuncPtrs指针的数组
让我们假设你希望(因为某些莫名其妙的原因)把一个指向下面函数的指针存入funcPtrArray数组:
int doSomething();
你不能不经过类型转换而直接去做,因为doSomething函数对于funcPtrArray数组来说有一个错误的类型。在FuncPtrArray数组里的函数返回值是void类型,而doSomething函数返回值是int类型。
funcPtrArray[0] = doSomething; // 错误!类型不匹配
reinterpret_cast可以让你迫使编译器以你的方法去看待它们:
funcPtrArray[0] = // this compiles
reinterpret_castFuncPtr慧亏(doSomething);
转换函数指针的代码是不可移植的(C++不保证所有的函数指针都被用一样的方法表示),在一些情锋敬况下这样的转换会产生不正确的结果
c++,static_cast
这个是静态强制装换,岩含在编译时期对类型做出检带枣迟查,但是在运行期就不再检查。适合的是普通的内置类型的强制转换。它是操作符,所以不需要引用头文件。
static_cast类蠢李型(需要转换的)
c++中“static_cast”有什么用?
static_cast在C++中用于山档将表达式的值转换为指定的类型,但没有运行时类型检查来保证转换的安全性。
主要有以下用法:
(1)用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。
(2)用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转谨神换的安全性也要开发人员来保证。
(3)把空指逗晌乱针转换成目标类型的空指针。
(4)把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。
c语言的cast()怎么用,新手求教
您好,
对于具有标准定义转换的简单类型而言工作的很好。然而,这样的转换符也扰困困能不分皂白的应用于类(class)和类的指针。ANSI-C++标准定义了四个新的转换符:'reinterpret_cast', 'static_cast', 'dynamic_cast' 和 'const_cast',目的在于控制类(class)之间的类型转换。
C++的四种cast操作符的区别和用法:
1 reinterpret_cast
'reinterpret_cast'转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。(译注:是指针具体缓念的地址值作为整数值?)
这个操作符能够尺腔在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。
如果情况是从一个指针到整型的拷贝,内容的解释是系统相关的,所以任何的实现都不是方便的。一个转换到足够大的整型能够包含它的指针是能够转换回有效的指针的。
2 static_cast
'static_cast'允许执行任意的隐式转换和相反转换动作。(即使它是不允许隐式的)
应用到类的指针上,意思是说它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时,也能够执行相反动作:转换父类为它的子类。
3 dynamic_cast
'dynamic_cast'只用于对象的指针和引用。当用于多态类型时,它允许任意的隐式类型转换以及相反过程。不过,与static_cast不同,在后一种情况里(注:即隐式转换的相反过程),dynamic_cast会检查操作是否有效。也就是说,它会检查转换是否会返回一个被请求的有效的完整对象。
检测在运行时进行。如果被转换的指针不是一个被请求的有效完整的对象指针,返回值为NULL.
4 const_cast
这个转换类型操纵传递对象的const属性,或者是设置或者是移除:
其它三种操作符是不能修改一个对象的常量性的。
注意:
'const_cast'也能改变一个类型的volatile qualifier.
——如有帮助,请采纳一下。
关于c++static_cast和c++static_cast和dynamic_cast区别的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。