doubleimag=0.0):m_real(real),m_imag(imag){}public:operatordouble()const{returnm_real;}//类型转换函数private:doublem_real;doublem_imag;};intmain(){//下面是正确的用法intm=100;Complexc(12.5,23.8);longn=static_cast<long>(m);//宽转换,没有信息丢失charch=static_cast<char>(m);/...
移位 static_cast<ULONGLONG>(0x01)强转成long类型 << 左移 fileInfo.chnn 位数
inti =10;int*p = &i;int*p2 = reinterpret_cast<int*>(&i);char*pc = reineterpret_cast<char*>(pi);intI =10;int*p = &I;void*pvoid = reinterpret_cast<void*>(p);int*p1 = reinterpret_cast<int*>(pvoid);//被认为是危险的类型转换 intiv1 =100;longlonglv1 =8898899400;//88亿 十六...
reinterpret_cast 可以认为是 static_cast 的一种补充,一些 static_cast 不能完成的转换,就可以用 reinterpret_cast 来完成,例如两个具体类型指针之间的转换、int 和指针之间的转换(有些编译器只允许 int 转指针,不允许反过来)。 下面的代码代码演示了 reinterpret_cast 的使用: #include<iostream> usingnamespace s...
longn=static_cast<long>(m);//宽转换,没有信息丢失 charch=static_cast<char>(m);//窄转换,可能会丢失信息 int*p1=static_cast<int*>(malloc(10*sizeof(int)));//将void指针转换为具体类型指针 void*p2=static_cast<void*>...
static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为new_type类型,用来强迫隐式转换如non-const对象转为const对象,编译时检查,用于非多态的转换,可以转换指针及其他,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: 风险较低的用法: ...
17. A *pa = reinterpret_cast<A*> ( & n); //强行让 pa 指向 n 18. pa->i = 400; // n 变成 400 19. pa->j = 500; //此条语句不安全,很可能导致程序崩溃 20. cout << n << endl; // 输出 400 21. long long la = 0x12345678abcdLL; ...
C++引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast、reinterpret_cast、const_cast和dynamic_cast。 强制类型转换是有一定风险的,有的转换并不一定安全,例如把int整形数值转换成一个指针类型,把基类指针转换成派生类指针的时候有可能会失败,把一种函数指针转换成另一种函数指针...
错误C2440 “static_cast”: 无法从“long (__thiscall CKMainWnd::* )(WPARAM,CView *)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)” opctestclient e:\centerproject\opc\visual c++ opc client example\mainwnd.cpp 132 原因
c++类型转换static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较,显示转换,隐式转换 1.实现隐式类类型转换 short a=2000; int b; b=a; short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有warning,如下图所示。宽化转换(如char到int,int到long long,int到...