【发布时间】:2014-03-28 11:59:23
【问题描述】:
是否可以在 C++ 中进行这种类型的转换?
我需要以这种方式声明我的属性。
Class A {
public:
void update() { ++i_; }
private:
int i_;
}
Class B{
public:
void foo() {
a_->update(); /* Error */
}
private:
const A* const a_;
}
错误是:
将“const A”作为“void A::update()”的“this”参数传递会丢弃 限定符 [-fpermissive]
我尝试使用 static_cast,但还不够……不起作用……有什么想法吗?
【问题讨论】:
-
正如您在答案中看到的,您需要更改您的设计。您有一个指向
const的指针,因此在对象上调用非const方法的唯一方法是const_cast。但是你做修改对象(++i)所以这是未定义的行为。即使现在有效,明天也不会有效。 改变你的设计. -
@iavr: 等一下
const_cast不一定表示未定义的行为;只有当指向的对象首先被创建const时,你才会有未定义的行为。