cma*_*t85 5 c++ const-correctness lazy-evaluation
我制作了一个openGL相机类,它使用延迟评估通过getter函数提供最终投影或模型 - 视图 - 投影矩阵.用户在实例的整个生命周期(FOV,位置等)中提供各种相机参数,但不是每次更改参数时都重新计算投影矩阵和/或MVP矩阵,而是设置"已更改"标志(即旧的缓存矩阵现在无效).只要用户随后请求更新的最终矩阵,就会重新计算,结果缓存,并返回const引用.
一切都听起来不错,直到我打电话给我:
const QMatrix4x4& oE_GLCamera::getModelViewProjection() const;
Run Code Online (Sandbox Code Playgroud)
来自const oE_GLCamera实例的函数...我在我的应用程序中使用const引用来从CAD视口中提取相机数据而不更改相机,但是如果它们无效,我的getter函数会对成员变量执行惰性求值 - 因此会破坏const正确性.
是否有语言功能或设计范例我不知道如何帮助解决这个问题?或者懒惰的评估从根本上与const正确性不兼容?我知道const_cast <>,我自己从未使用过它,但读了一些关于它的内容,可以归结为:如果你使用它,你已经在某个地方出错了.还是会成为我的救世主?
Cam,任何建议都会得到很好的接受
CB *_*ley 15
是否有语言功能或设计范例我不知道如何帮助解决这个问题?
或许,mutable?
被标记为一个类的成员mutable是总是非const即使它是通过引用或指针所属类这是一种访问const引用或指针const.