3.const_cast\nconst定义的常变量是不能进行重新赋值的,但是如果我们使用const_cast让一个指针指向一个const变量所在的空间,就可以通过指

3.const_cast\nconst定义的常变量是不能进行重新赋值的,但是如果我们使用const_cast让一个指针指向一个const变量所在的空间,就可以通过指针来修改;对应的是C语言的强制类型转换。\n\nconst int a = 10;\nint* pa = const_cast\u003Cint*>(&a);\n*pa = 20;\ncout \u003C\u003C a \u003C\u003C endl; //10\ncout \u003C\u003C *pa \u003C\u00endl;//20\n1\n2\n3\n4\n5\n\n\npa中存储的是a的地址,*pa和a打印出来的值理论上来说是一样的,那为什么打印的值不一样?\n\n解答:const修饰的常变量,编译器会做出一些优化,如直接放在寄存器中,或者是定义成一个宏;在流插入时a不会去内存中去取,而是直接找到寄存器或者宏,所以打印的还是10;而*pa会去内存中找,所以打印的是20。\n\n4.dynamic_cast\n父类指针或引用可以指向子类的指针或引用,但是如果直接使用子类指针或引用指向父类的指针或引用就会报错。\n\n注意:父类对象是无论如何都无法转换成子类对象的。\n\nclass A\n{\npublic:\n\tvirtual void f() {}\n};\nclass B : public A\n{};\n\nint main()\n{\n    A aa;\n\tB bb;\n\tbb = aa;\n\tbb = (B)aa;\n\tbb = dynamic_cast\u003CB>(aa);\n    return 0;\n}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值