注意:用于去除变量的只读属性,强制转换的目标类型必须是指针或引用 比如:下面代码第二行会报错,“const_cast”: 无法从“const int”转换为“int”,值得注意的是,强转去掉常量属性之后通过指针修改变量,并不能改变原本常量的值,在【C++const常量玩出新花样】中有讲到 结果: 3,reinterpret_cast 用法:reinterpret_cas...
#include<iostream>#include<cstdlib>#include<ctime>usingnamespacestd;classStr{public:// 用C风格的字符串p作为初始化值Str(constchar*p){cout << p << endl;}//本意是预先分配n个字节给字符串Str(intn){cout << n << endl;}};intmain(void){Str s ="Hello";//隐式转换,等价于Str s = Str("...
代码语言:cpp 复制 double foo = 3.14; int bar; bar = static_cast<int>(foo); // 使用 static_cast 进行类型转换 而(int)foo是C风格的类型转换,它在C++中仍然有效,但不是推荐的做法。 例如: 代码语言:cpp 复制 double foo = 3.14; int bar; bar = (int)foo; // 使用 C 风格类型转换进行类型转...
#include<iostream>using namespacestd;intmain(){char*tmp ="abc";// 不能将char*型的数据转换为int*,但C语言强转可以// cout << static_cast<int*>(tmp) << endl;int*tmp_ = (int*)(tmp);cout<< tmp_ <<endl;cout<< static_cast<int*>(tmp_) <<endl;//转为自身可以return0; }// 结果...
// C 语言中 隐式类型转换 赋值时自动转换 int num = pi; 1. 2. 在 编译器 编译时 , 会报如下警告 , 严重性 代码 说明 项目 文件 行 禁止显示状态 警告C4244 “初始化”: 从“double”转换到“int”,可能丢失数据 HelloWorld Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Test.cpp 9 ...
静态类型转换,在编译期间提供类型转换检查,主要用于非多态的场景(当然也可以用于多态的场景)。相比较于C语言风格引入了一些静态的约束,比如检查const属性和voliate属性 constintg=20;int*h=static_cast<int*>(&g); 上边示例的转换会导致编译错误,因为非const指针h想要指向一个常量。
newType 是要转换成的新类型,data 是被转换的数据。例如,老式的C风格的 double 转 int 的写法为: doublescores=95.5;intn=(int)scores; C++ 新风格的写法为: doublescores=95.5;intn=static_cast<int>(scores); 1、static_cast 关键字 static_cast 只能用于良性转换,这样的转换风险较低,一般不会发生什么意...
int*p1=static_cast<int*>(malloc(10*sizeof(int)));//将void指针转换为具体类型指针 void*p2=static_cast<void*>(p1);//将具体类型指针,转换为void指针 doublereal=static_cast<double>(c);//调用类型转换函数 //下面的用法是...
static_cast 和 C 风格的强转在此类情况下 (值转值)行为基本一致 int f = (int)a; ...
谷歌编程规范指出,要使用C++的类型转换操作符,如static_cast。而坚决抵制c语言中的强制类型转换,例如int y = (int)x。 所以,今天就来说一说C++中的类型转换。 其中c++类型转换运算符有: static_cast dynamic_cast const_cast reinterpret_cast 今天主要深入分析static_cast的用法。