将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
!
上一篇: Convert const T* const to T*
下一篇: Save TableView Data