推荐答案
测试一下
题目
有如下的代码,下面$ cast返回值为1的有
A. a=c; Scast (b,a)
B. $ cast (b,c)
C. $ cast (b,a)
D. a=b; $ cast (b,a)
参考答案与知识点
参考答案
正确选项为A、B、D。$cast是SystemVerilog中的动态类型转换函数,返回1表示转换成功,0表示失败。转换成功与否取决于源对象的实际类型是否为目标类型的子类或同一类。
选项A:先执行a=c,将C类对象赋值给A类句柄a(向上转型合法),a实际指向C类对象;然后$cast(b,a),将a转换为B类句柄。由于C是B的子类(继承链:C→B→A),实际对象类型兼容B,转换成功,返回1。
选项B:$cast(b,c),将C类句柄c直接转换为B类句柄。c实际指向C类对象,C是B的子类,转换合法,返回1。
选项C:$cast(b,a),a为A类句柄指向A类对象(new创建),A不是B的子类,将父类对象赋值给子类句柄是不合法的,转换失败,返回0。
选项D:先执行a=b,将B类对象赋值给A类句柄a(向上转型合法),a实际指向B类对象;然后$cast(b,a),将a转换为B类句柄。实际对象类型B与目标类型B相同,转换成功,返回1。
故返回1的选项为A、B、D。
涉及知识点
- SystemVerilog $cast动态类型转换
- 继承关系与向上/向下转型
- 静态类型与实际类型的区分
- $cast返回值含义(1成功/0失败)
- 子类句柄赋值给父类句柄的合法性