对于函数,我们必须使用reinterpret_cast两次: #include<iostream> using any_fcn_ptr_t = void(*)(); void print(int i) { std::cout << i <<std::endl; } int main() { //Create type-erased pointer to function: auto any_ptr = reinterpret_cast<any_fcn_ptr_t>(&print); //Retrieve the ...
1#include<iostream>2#include<exception>3using namespace std;45classCBase{virtualvoiddummy(){}};6classCDerived:publicCBase{int a;};78intmain(){9try{10CBase*pba=newCDerived;11CBase*pbb=newCBase;12CDerived*pd;1314pd=dynamic_cast<CDerived*>(pba);15if(pd==0)cout<<"Null pointer on first...
MyBase *base = new MyBase(); MyChild *child = dynamic_cast<MyChild*>(base); if (child == 0) std::cout << "Null pointer returned"; 如果转换了引用而不是指针,则动态转换将通过抛出 bad_cast 异常而失败。这需要使用 try-catch 语句来处理。 #include <exception> // … try { MyChild ...
int* pi = reinterpret_cast<int*>(pf); 1. 2. 3. 4. 5. 6. 7. 8. 9. 简而言之,static_cast<> 将尝试转换,举例来说,如float-到-integer,而reinterpret_cast<>简单改变编译器的意图重新考虑那个对象作为另一类型。 指针类型(Pointer Types) 指针转换有点复杂,我们将在本文的剩余部分使用下面的类: ...