const_cast会不同的行为:原语类型VS对象类型

问题描述 投票:1回答:1

如果我们声明一个变量为const其含量不得甚至通过非const引用改变。在下面的代码我不明白为什么我越来越依赖于类型(primitive VS对象)不同的行为:

#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 

}
c++
1个回答
-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
}

© www.soinside.com 2019 - 2024. All rights reserved.