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

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

目录

  • 目录
    • 类型转换——前言
      • 补充知识(了解即可)
    • const_cast
      • 基础示例
      • 基础讲解
    • 注意未定义行为
      • 基础示例
      • 基础讲解

类型转换——前言

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

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

补充知识(了解即可)

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

const_cast

基础示例

#include  // 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(value_ref); // 将value_ref从const int &转换成int &
    auto p = const_cast(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 

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

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

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

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

    return 0;
}

基础讲解

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

你可能感兴趣的:(C++教程)