关于cppreference中的const_cast用法

时间:2017-12-21 10:58:12

标签: c++

请参阅this page并转到示例。 这是关于

的使用的演示
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 的常量。我的意思是,这个指针指向当前类型对象,而不是i本身。

为什么不:

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

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

1 个答案:

答案 0 :(得分:5)

  

我无法理解为什么const_cast会修改此

的常量

没有。你可以说它创建了另一个临时指针,它不是指向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的指针类型为type const。并且所有成员(不可变)也是通过this进行访问的常量。