如果我们将变量声明为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
}
答案 0 :(得分:-2)
您不能舍弃const变量x的常数,因为变量x是const变量。
const_cast
实际执行的操作是丢弃const指针或引用,因为您的成员m_value
不是const成员,因此您可以使用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
-------------------------------------------
类MyClass
{
公众:
const int m_value = 0;
};
int main(){
const MyClass a;
const_cast<MyClass&>(a).m_value= 20 ;// undefined behavior
}