static_cast, const_cast, reinterpret_cast的简单理解.

 #include <iostream>
#include <typeinfo>
/*IBM的C++指南里倒是明确告诉了我们reinterpret_cast可以,或者说应该在什么地方用来作为转换运算符:
从指针类型到一个足够大的整数类型
从整数类型或者枚举类型到指针类型
从一个指向函数的指针到另一个不同类型的指向函数的指针
从一个指向对象的指针到另一个不同类型的指向对象的指针
从一个指向类函数成员的指针到另一个指向不同类型的函数成员的指针
从一个指向类数据成员的指针到另一个指向不同类型的数据成员的指针*/
int function_test(const int& number)
{
 std::cout<<"enter test: "<<std::endl;
 return number;
}
void function(const int& number)
{
 std::cout<<"enter function: "<<number<<std::endl;
}
using function_ptr = void (*)(const int&);
using function_ptr_two = int (*)(const int&);
int main()
{
 const int& a = 10;
 int& a_ = const_cast<int&>(a);//把const int& 转换为 int&;
 std::cin>>a_;
 std::cout<<"a: "<<a<<std::endl;
 
 static int b = 20;
 int& b_ = static_cast<int&>(b);
 std::cin>>b_;
 std::cout<<"b: "<<b<<std::endl;
 
 int c = 30;
 int d = 40;
 function_ptr pointer = reinterpret_cast<function_ptr>(&c); //把c的地址转换成了指向函数的指针,这是错误的用法不要这么用!!!!!!!!!是毫无意义的. 
 function_ptr pointer_two = function;
 pointer_two(50);
 
 std::cout<<typeid(&c).name()<<std::endl; // c仍然是int.
 std::cout<<c<<"   "<<*pointer<<std::endl;
 
 function_ptr_two two = function_test;
 function_ptr tree = reinterpret_cast<function_ptr>(two);
 
 int e = 60;
 tree(e); //进入的函数是function_test; 
  
 return 0;
}

你可能感兴趣的:(static_cast, const_cast, reinterpret_cast的简单理解.)