const_cast
const_cast能经由指针或引用,改变对象的底层const。如果对象本身是指针或引用,对象的底层是const,则使用强制类型转换获得写权限是合法的行为
#include<iostream>
using namespace std;
int main() {
const char str[] = "hello";
char* c = const_cast<char*>(str);
strcpy(c,"world");
cout << str << ” “ << c << endl;
return 0;
}
输出结果:world world
但是,如果对象本身是常量,使用const_cast再写变量,则结果未定义
#include<iostream>
using namespace std;
int main() {
const int val = 1;
int* aa = const_cast<int*>(&val);
*aa = 2;
cout << val << " " << *aa << endl;
return 0;
}
输出结果:1 2
可见并没有改变const对象的值。
dynamic_cast
dynamic_cast<type*>(e)
dynamic_cast<type&>(e)
dynamic_cast可用