const_cast不同的行为:基元类型与对象类型

const_cast different behavior: primitive type vs object type

本文关键字:类型 对象 cast const      更新时间:2023-10-16

如果我们将变量声明为 const,即使通过非 const 引用,其内容也不得更改。在下面的代码中,我不明白为什么我会根据类型(原始与对象(获得不同的行为:

#include <iostream>
class MyClass 
{
public:   
   int m_value ;
   MyClass(int value): m_value(value) {} ;

}
int main()
{
 const int x = 0 ;
 const_cast<int &>(x)=20 ;
 std::cout << x << std::endl ; //output 0
 const MyClass a(0) ;
 const_cast<MyClass&>(a).m_value= 20 ;
 std::cout << a.m_value << std::endl ; //output 20 
}

你不能抛弃常量变量 x 的常量,因为变量 x 是一个常量变量。

const_cast实际做的是抛弃常量指针或引用,因为你的成员m_value不是常量成员,你可以使用const_cast修改它的值

阅读更多关于此链接

 int x = 0 ;
 const int& p = x; 
 // p = 20; // error: p is const
 const_cast<int &>(p)=20 ;
 std::cout << p << std::endl ; //output 20
-------------------------------------------

类 我的类 { 公共:
常量整数 m_value = 0; };

int main(){
  const MyClass a;
  const_cast<MyClass&>(a).m_value= 20 ;// undefined behavior
}