将const T * const转换为T *

用C ++进行这种投射是否可行?
需要以这种方式宣布我的属性。

Class A {
public:
  void update() { ++i_; }
private:
  int i_;  
}

Class B{
public:
   void foo() {
       a_->update(); /* Error */
   }
private:
 const A* const a_;
}

错误是:

作为'void A :: update()'的'this'参数传递'const A'会丢弃限定符[-fpermissive]

我尝试与static_cast ,但是不够..不工作..任何想法?


你有两个选择。 或者让A :: update一个const函数 -

Class A {
  void update() const;
}

或者删除指针的常量。

Class B{
public:
   void foo() {
       const_cast<A*>(a_)->update();
   }
private:
 const A* const a_;
}

前者将是首选方法,但这也会阻止你在A类更新中做任何有用的事情。

作为一个经验法则,如果你不得不把const放在某个东西上,那么你真的想看看为什么指针是const的。


使用非const方法的const成员是forbiden(除非使用mutable )。 在声明foo()update()之后放置一个const

void update() const { ...  }
              ^^^^^

void foo() const { ... }
           ^^^^^

要么 ...

如果你不想update一个const ,你可以使用const_cast

void foo() const // Now, this const keyword is optional but recommanded
{
   const_cast<A*>(a_)->update();
   ^^^^^^^^^^^^^^
}

假设你不能将方法声明为const ,并且你知道自己在做什么(tm)以及为什么这样做不好:请尝试const_cast

链接地址: http://www.djcxy.com/p/44913.html

上一篇: Convert const T* const to T*

下一篇: Save TableView Data