Why doesn't this reinterpret_cast compile?

前端 未结 11 654
暗喜
暗喜 2020-12-04 16:32

I understand that reinterpret_cast is dangerous, I\'m just doing this to test it. I have the following code:

int x = 0;
double y = reinterpret_c         


        
11条回答
  •  有刺的猬
    2020-12-04 16:58

    In C++ reinterpret_cast can only perform a specific set of conversions, explicitly listed in the language specification. In short, reinterpret_cast can only perform pointer-to-pointer conversions and reference-to-reference conversions (plus pointer-to-integer and integer-to-pointer conversions). This is consistent with the intent expressed in the very name of the cast: it is intended to be used for pointer/reference reinterpretation.

    What you are trying to do is not reinterpretation. If you want to reinterpret an int as a double you'd have to convert it to a reference type

    double y = reinterpret_cast(x); 
    

    although the equivalent pointer-based reinterpretation is probably more explicit

    double y = *reinterpret_cast(&x); // same as above
    

    Note though, that while reinterpret_cast can convert the reference/pointer types, the actual attempt to read the data through the resultant reference/pointer produces undefined behavior.

    And in any case this, of course, can't make much sense on a platform with int and double of different size (since in case of larger double you will read beyond the memory occupied by x).

    So, in the end it all boils down to what you were trying to achieve. Memory reinterpretation? See above. Some kind of more meaningful int to double conversion? If so, reinterpret_cast won't help you here.

提交回复
热议问题