【发布时间】:2017-05-23 21:59:09
【问题描述】:
我一直认为,当一个变量被类型转换时,它会产生一个副本,并且任何更改都会影响该临时变量。但是,下面的屏幕截图表明并非如此。显然,原始变量是什么变化。为什么?我很好奇,因为我从未见过类似的东西。
【问题讨论】:
-
并非总是如此,但通常情况下,类型转换只是重新解释构成某种类型的位与构成另一种类型的相同位。但是演员表也可能导致转换,例如
(int)myFloat. -
@RudyVelthuis 不,演员 从不 这样做。在某些情况下,您可以使用它来获得一个类型双关的指针并重新解释它。
-
@Quentin:那么下面的演员做了什么:
int a = -17; unsigned int b = (unsigned int)a;。我称之为重新解释。 -
@RudyVelthuis 见the second bullet point here。一切都是根据表示的值而不是表示来定义的。例如,一个实现可能对负整数使用符号幅度表示,其位与模后相同数字的无符号表示不匹配。
-
@Quentin:描述的是转换,而不是转换。