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

时间:2019-02-07 08:30:35

标签: c++

如果我们将变量声明为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 

}

1 个答案:

答案 0 :(得分:-2)

您不能舍弃const变量x的常数,因为变量x是const变量。

const_cast实际执行的操作是丢弃const指针或引用,因为您的成员m_value不是const成员,因此您可以使用const_cast修改其值

read more on this link

 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

-------------------------------------------

    类MyClass     {     公众:
      const int m_value = 0;     };

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