const_cast:去掉const属性转换 const_cast<目标类型>(标识符)//目标类型只能是指针或是引用
#include<iostream>
using namespace std;
struct test
{
int data;
};
void main()
{
const test a = { 100 };
//test a1 = const_cast<test>(a);//会报错,因为目标类型只能是指针或引用
test &a1 = const_cast<test&>(a);//目标类型为引用
a1.data = 200;
cout << " a:" << a.data << '\t' << "a1:" << a1.data << endl;
test *a2 = const_cast<test*>(&a);//目标类型为指针
a2->data = 300;
cout << " a:" << a.data << '\t' << "a2:" << a2->data << endl;
const int b = 10;
int &b1 = const_cast<int&>(b);//目标类型为引用
b1 = 20;
cout << " b:" << b << '\t' << "b1:" << b1 << endl;
int *b2 = const_cast<int*>(&b);//目标类型为指针
*b2 = 30;
cout << " b:" << b << '\t' << "b2:" << *b2 << endl;
}
如果const_cast<目标类型>(标识符)中的目标类型不是指针或者引用,会报这个错误
reinterpret_cast:重新解释类型转换 reinterpret_cast<目标类型>(标识符)
它可以进行强制类型转换
#include<iostream>
using namespace std;
class test
{
public:
virtual void A() = 0;
};
class Book
{
void printp()
{
cout << "book" << endl;
}
};
void main()
{
test * base = NULL;
Book* book = reinterpret_cast<Book*>(base);
}
我们要清楚的知道 要转的变量,类型转换前是什么类型,类型转换后 是什么类型。转换后有什么后果。
一般情况下,不建议进行类型转换。