为什么r*r的类型仍然是int

img

img


这个里面明明对rr进行了强制类型转换成double类型,为什么在监视窗口看到rr仍然为int类型?

r是int类型,r*r也应该是int类型,没问题啊。

这里引用你的问题:

这个里面明明对rr进行了强制类型转换成double类型,为什么在监视窗口看到rr仍然为int类型?

强制类型转换后,是将 r*r 的结果转换成一个 double 类型保存到寄存器或一个临时的栈空间中。你在编译器监视的时候,输入 r*r 进行监视,监视器会再次计算 rr 的结果,然后展示到监视窗口上。可以说监视窗口的 r*r 与代码中的 r*r 不是一个东西(这里的rr是一个右值)。

另外,强制类型转换是不会改变原变量的类型的,换句话说,r 最初定义的是 int, 则在整个 r 的声明周期和作用内 都不可能变成另一种类型。强制类型转换只是将结果的值装换成目标类型,它保存在寄存器中或临时栈空间中 以待对齐进行运算或赋值,在该语句结束后临时空间被销毁。