GeraldIAD 发表于 2022-4-30 13:40:23

引用型的静态/动态类型是什么?

假设存在下面代码,选项中说法正确的是:
class A{/*略*/:
class B:public A{/*略*/;
B*pb;
/*其它代码,略*/
A*pobj=pb;
A&robj=*pb;
A aobj=*pb;

A pobj的静态类型是A*,动态类型是B
B robj的静态类型是A&,动态类型是B
C aobj的静态类型是A,动态类型是不确定的
D 以上都不对

见B选项,robj是A&型,请问这个robj的静态/动态类型是什么?

jhanker 发表于 2022-4-30 14:05:46

A选项对的

GeraldIAD 发表于 2022-4-30 15:53:35

jhanker 发表于 2022-4-30 14:05
A选项对的

A选项中,pobj的动态类型是B*型,故A选项错误

jhanker 发表于 2022-4-30 16:33:14

本帖最后由 jhanker 于 2022-4-30 16:37 编辑

GeraldIAD 发表于 2022-4-30 15:53
A选项中,pobj的动态类型是B*型,故A选项错误

对应该是B*

*pb是指向B的, robj是引用,静态类型是 A&,但引用的内容是B

GeraldIAD 发表于 2022-5-1 13:46:46

本帖最后由 GeraldIAD 于 2022-5-1 14:02 编辑

jhanker 发表于 2022-4-30 16:33
对应该是B*

*pb是指向B的, robj是引用,静态类型是 A&,但引用的内容是B

重新测试了一下,跟原来说的不太符合,我列在下面:
pobj静态类型为 A* 动态类型为 B*
robj静态类型为 A 动态类型为 B
aobj静态类型为 A 动态类型是 A

jhanker 发表于 2022-5-2 21:26:04

本帖最后由 jhanker 于 2022-5-2 21:31 编辑

GeraldIAD 发表于 2022-5-1 13:46
重新测试了一下,跟原来说的不太符合,我列在下面:
pobj静态类型为 A* 动态类型为 B*
robj静态类型 ...

A&的意思就是A是引用类型其实,也可以说成是B的别名,编译后的实现是和指向B的指针类似

ABC三项前半句应该没问题 A* A& A 分别是A是指针 A是引用 A是一般类型变量 ,在A&=B的情况下 赋值和一般变量一样 B=3;与A=3等价 而不写成 A&=3
页: [1]
查看完整版本: 引用型的静态/动态类型是什么?