3. 常量转换

常量转换(const_cast) 是只用于移除添加 const(或volatile) 修饰符的转换。它只能改变 const 属性。

常量转换不能改变对象的类型本身,只能改变其 const 属性。主要用于需要调用不修改对象的非 const 常成员函数的场景。

注意 移除 const 属性后对原本就是 const 定义的对象进行写操作是未定义行为。

语法

const_cast<新类型>(表达式)

示例

// filename: const_cast.cpp
#include <iostream>

using namespace std;

int main(int argc, char * argv[]) {
    const int c = 100;
    int & rc = const_cast<int&>(c);

    cout << "c:" << c << "rc:" << rc << endl;
    rc = 200; // 为定义的行为(结果不确定)。
    cout << "c:" << c << "rc:" << rc << endl;

    return 0;
}

编译和运行结果如下:

weimz@mzstudio:~/old$ g++ -o const_cast const_cast.cpp
weimz@mzstudio:~/old$ ./const_cast 
c:100rc:100
c:100rc:200