• Index

const_cast

Reads: 19

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进行操作将引发未定义行为。


Comments

Make a comment

  • Index

WARNING: You are using an old browser that does not support HTML5. Please choose a modern browser (Chrome / Microsoft Edge / Firefox / Sarafi) to get a good experience.