C++入门教程(八十三):const_cast

小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/

目录

类型转换——前言

当说完这部分内容后,C++的基础语法已经基本上讲解完毕。你可以尝试找一些项目做一做,提高自己的编程水平,然后一边做项目一边学习剩下的课程。

前面已经讲解过隐式转换、static_castdynamic_cast,这部分教程将讲解C++类型转换中最后两个转换。

补充知识(了解即可)

C++尽量与C语言兼容,所以也可以使用C语言的强制转换,但是并不推荐使用。因为C++的类型转换有检测功能,使你的代码更安全,虽然关键字长了一点。。C语言的强制转换用法:int a = (int)12.7f;。只需要在需要转换类型的值或者变量前面加上()()里面是目标类型。

const_cast

基础示例

#include <iostream> // std::cout std::endl

int main(void)
{
    int value = 1024;

    const int &value_ref = value; // 引用, 不可改变value的值
    const int *value_pointer = &value; // 指针, 不可改变value的值

    auto r = const_cast<int &>(value_ref); // 将value_ref从const int &转换成int &
    auto p = const_cast<int *>(value_pointer); // 将value_ref从const int *转换成int *

    r = 666;
    std::cout << value << std::endl;

    *p = 233;
    std::cout << value << std::endl;

    return 0;
}

基础讲解

const_cast可以将不可改变值的引用或者不可改变指向内存数据的指针,转换成可以改变值的引用或者可以改变指向内存数据的指针。但前提是:实际的变量的值是可以改变的

注意未定义行为

基础示例

#include <iostream>

int main(void)
{
    const int value = 1024;

    const int &value_ref = value; // 引用, 不可改变value的值
    const int *value_pointer = &value; // 指针, 不可改变value的值

    auto r = const_cast<int &>(value_ref); // 将value_ref从const int &转换成int &
    auto p = const_cast<int *>(value_pointer); // 将value_ref从const int *转换成int *

    // r = 666; // 未定义行为
    // *p = 233; // 未定义行为

    return 0;
}

基础讲解

代码中的value使用了const修饰,它是不能改变的变量,这个时候使用const_castvalue进行操作将引发未定义行为。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值