const_cast不同的行为:基元类型与对象类型
const_cast different behavior: primitive type vs object type
如果我们将变量声明为 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
}
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- C++ 多态模板类,模板类型对象的实例化
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++:初始化指向具有不同类型对象的指针数组
- 在类 C++ 中构造的模板类型对象
- 如何将颁发者名称设置为x509_req类型对象
- 将任何数据类型/对象作为参数传递以确定其大小
- 将引用类型对象的数组从C#封送到C++
- <T> 从类型对象创建类型<T1>对象的构造函数
- C++是否有现有的方法来检查对象是否是派生类型对象
- C 模板:创建与现有对象相同的类型对象
- 链接列表中的虚函数 - 多种返回类型(对象)
- 没有适当操作员()的类型对象的呼叫
- 制作垫子类型对象的数组.输出窗口显示同一帧
- 抽象类型对象的分配
- 在std::list中就地创建自定义类型对象
- 接受泛型列表类型对象的参数
- C++-将模板类型对象强制转换为特定的数据类型
- 试图在C++中打印存储在类型对象数组中的信息