有什么方法可以将const class *强制转换为非const class

时间:2020-06-10 08:40:15

标签: c++ qt

有什么方法可以将const class *转换为非const class *?

背景是QModelIndex->model()返回指向模型的const指针。我需要访问model::setData。但是我不能。

1 个答案:

答案 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的指针。