1、为什么需要类型转换运算符
下面的程序中的类型转换是被编译器允许的,但是这是一个没有意义的转换。为了避免这种情况发生,C++中对类型转换进行了更加严格的限制。
struct Data
{
int data[100];
};
Data d = { 1, 2.5, 23 };
char * p = (char *)(&d); // 类型转换,转换成字符串
2、C++中的类型转换运算符
● dynamic_cast
dynamic_cast <type_name> (expression)
该运算符使得能够在类层次结构中进行向上转换,而不允许其他转换。
● const_cast
const_cast <type_name> (expression)
该运算符能够去除指针(或引用)的const属性
● static_cast
static_cast <type_name> (expression)
仅当type_name可被隐式转换为expression所属的类型,或者expression可被隐式转换为type_name所属的类型时,上述转换才是合法的,否则将出错。
● reinterpret_cast
reinterpret_cast <type_name> (expression)
用来完成一些C++中通常语法上不允许的类型转换。
3、类型转换运算符的应用—“运用const成员函数实现出其non-const孪生兄弟”
4、尽量少做转型动作(Effective C++, 条款27)