类型转换
# 1 static_cast
静态类型转换
#include <iostream>
using namespace std;
int main(void)
{
double dPi = 3.1415926;
int num1 = (int)dPi; //c语⾔的 旧式类型转换
int num2 = dPi; //隐式类型转换
//静态的类型转换:
//在编译的时 进⾏基本类型的转换 能替代c⻛格的类型转换 可以进⾏⼀部分检查
int num3 = static_cast<int>(dPi); //c++的新式的类型转换运算符
cout << "num1:" << num1 << " num2:" << num2 << " num3:" << num3 << endl;
return 0;
}
# 2 reinterpreter_cast
interpret 是解释的意思,reinterpret 即为重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值 相当于是强制类型转换。
# 3 dynamic_cast
父类指针转换为子类指针
# 4 const_cast
const_cast<目标类型> (标识符) 去掉const属性,目标类类型只能是指针或引用。
#include <iostream>
using namespace std;
struct A{int data;};
int main(void)
{
const A a = {200};
A a1 = const_cast<A>(a);//err,invalid use of const_cast, which is not a pointer, reference, nor a pointer-to-data-member type
a1.data = 300;
A &a2 = const_cast<A&>(a);
a2.data = 300;
cout<<a.data<<a2.data<<endl;
A *a3 = const_cast<A*>(&a);
a3->data = 400;
cout<<a.data<<a3->data<<endl;
const int x = 3;
int &x1 = const_cast<int&>(x);
x1 = 300;
cout<<x<<x1<<endl;
int *x2 = const_cast<int*>(&x);
*x2 = 400;
cout<<x<<*x2<<endl;
return 0;
}