如果转换不合法,对于指针类型,dynamic_cast 会返回空指针 nullptr ; 对于引用类型,它会抛出 std::bda_cast 异常 注意:dynamic_cast是在运行时检查,并且 使用dynamic_cast 转换时,涉及的类通常至少需要有一个虚函数(比如虚析构函数),这样编译器才能再运行时使用类型信息和执行转换。另外在转换前,也得 Base* base...
reinterpret_cast运算符将空指针值转换为目标类型的空指针值。 reinterpret_cast的一个实际用途是在哈希函数中,即,通过让两个不同的值几乎不以相同的索引结尾的方式将值映射到索引。 C++ #include<iostream>usingnamespacestd;// Returns a hash code based on an addressunsignedshortHash(void*p ){unsignedintval...
reinterpret_cast 运算符将空指针值转换为目标类型的空指针值。 reinterpret_cast 的一个实际用途是在哈希函数中,即,通过让两个不同的值几乎不以相同的索引结尾的方式将值映射到索引。 点击查看代码 #include<iostream>usingnamespacestd;// Returns a hash code based on an addressunsignedshortHash(void* p){un...
基类指针转子类指针,使用子类指针指向基类对象(向下转型)。 当向下转型是不安全时,dynamic_cast返回空指针;static_cast返回非空指针,此时如果子类指针访问了基类对象没有的数据变量,就会报错(Segmentation fault (core dumped))。 所谓“安全的向下转型”即只有当Base class的指针确实指向Derived class对象时才能将其转为...
3、把空类型指针转换为目标类型的空指针 int main(void) { void* p = NULL; int a = 3; int* pi = &a; if (pi == NULL) { cout << "p == NULL" << endl;; } pi = static_cast<int*>(p); if (pi == NULL) { cout << "p == NULL"; ...
③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。 C++中static_cast和reinterpret_cast的区别 C++primer第五章里写了编译器隐式执行任何类型转换都可由static_cast显示完成;reinterpret_cast通常为操作数的位模式...
③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。 C++中static_cast和reinterpret_cast的区别 C++ primer第五章里写了编译器隐式执行任何类型转换都可由static_cast显示完成;reinterpret_cast通常为操作数的位模式...
在函数foo中,使用static_cast进行转换是不被允许的,将在编译时出错;而使用 dynamic_cast的转换则是允许的,结果是空指针。 reinpreter_cast 用法:reinpreter_cast<type-id> (expression) type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个...
2. 把空指针转换成目标类型的指针。(之前的做法是用强制转换(type-id*) 3. 用于有继承关系的子类与父类之间的指针或引用的转换 4. 把任何类型的表达式转换成void类型 特点: 用于非多态类型的转换 不执行运行时类型检查(转换安全性不如 dynamic_cast) ...
③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。 C++中static_cast和reinterpret_cast的区别 C++primer第五章里写了编译器隐式执行任何类型转换都可由static_cast显示完成;reinterpret_cast通常为操作数的位模式提...