关于cppReference中的const_cast用法

About const_cast usage in cppreference

本文关键字:cast 用法 const cppReference 中的 关于      更新时间:2023-10-16

请参阅此页面,然后转到示例。这是关于

使用的演示
struct type {
    type() :i(3) {}
    void m1(int v) const {
      // this->i = v;                 // compile error: this is a pointer to    const
      const_cast<type*>(this)->i = v; // OK as long as the type object isn't const
  }
   int i;
};

const 这意味着M1无法修改类型的成员变量。我不明白为什么const_cast修改了 this 的constness。我的意思是,指针指向当前类型对象,而不是i本身。

为什么不:

const_cast<int>((this)->i) = v; 

我可以说,当成员函数之一使用 const 限定符时,整个对象和所有成员变量变为 const ?为什么是const指针?

我不明白为什么const_cast修改了此

的constness

不是。您可以说它会创建另一个临时指针,这不是指向const type的指针,而是与this相同的地址。然后,它使用该指针访问i

为什么不 const_cast<int>((this)->i)

您可以做类似的事情,但是您需要铸造参考,而不是普通整数。

const_cast<int&>(i) = v; // this-> omitted for brevity

相同的警告适用于i的任何修改,如果this点点位于真正 const。

的对象。

我可以说,当成员函数之一使用const修饰符时,整个对象和所有成员变量变为const?为什么这是const指针?

是。成员函数上的const预选赛表示this的Pointee类型为type const。所有成员(不可变形)也是通过this的任何访问。