static_cast <int>(var)和*(int*)&var之间的区别是什么?

Rec*_*ker 3 c++ type-conversion static-cast

好的,所以我试着这样做

 int b;
 char x = 'a';

//Case 1    
b = static_cast<int>(x); 
std::cout<<"B is : "<<b<<std::endl;

//Case 2
b = *(int*)&x;   
std::cout<<"B is changed as  :: "<< b <<std::endl;
Run Code Online (Sandbox Code Playgroud)

现在我知道在第2种情况下,第一个字节x被重新解释为认为它是一个整数并且位模式被复制到b其中给出了一些垃圾,而在情况1中它只是将值转换charint.

除此之外,这两者有什么不同吗?

Ker*_* SB 12

第一个只是转换值:int b = x;与...相同int b = static_cast<int>(x);.

第二种情况假装int生活在实际上生活的地方x,然后试图阅读int.这是彻头彻尾的未定义行为.(例如,一个人int可能占用的空间比一个人多char,或者可能是char生活在一个不能生活的地址int.)