有什么方法可以将const class *转换为非const class *?
背景是QModelIndex->model()
返回指向模型的const指针。我需要访问model::setData
。但是我不能。
答案 0 :(得分:4)
有什么方法可以将const class *转换为非const class
是的。这就是const_cast
的目的。
但是,请注意,如果您修改const对象的状态(非可变的),则程序的行为是不确定的。除非您可以证明所指向的对象是非常量对象,否则不会通过强制转换的结果来修改该对象,除非使用const_cast
。
即使您可以证明您没有在修改const对象,const_cast
也会破坏类的封装,并可能使您进行程序的其他部分不期望的更改,这可能会导致行为不明确或根本不正确。我希望在model::setData
上调用QModelIndex->model()
时确实如此。
const_cast
是一种代码气味,最好在不需要时避免使用。 const_cast
的合理用例是重用复杂成员函数的实现,例如,该复杂成员函数具有基于*this
的常数返回const或non-const引用的变量的变体,但不修改目的。另一个用例是调用在const引入C语言之前编写的古老API,因此在永不修改指向对象的函数上使用指向非const的指针。