在编写用作其他库(C样式)API的包装器的类时,确保const正确性的相关实践有哪些?
我正在编写一个类(Renderer),该类将应用程序特定的渲染调用转换为相应的OpenGL(也许以后还有DirectX)调用。此类实际上没有通过调用Renderer::applyTransform(const Matrix&)来修改的自己的状态,但是在内部调用会更改OpenGL状态的API。在这种情况下,将此类API标记为const是正确的做法,还是“修改可观察的状态”也扩展到此类包装的OpenGL状态,需要我将其设为非成本?

这类似于Const-correctness and hardware writes,但是也许这是一个更具体的用例。

最佳答案

如果您要调用通过非const指针获取成员变量的C函数,则这些包装函数可能不应该是const。如果他们只是观察状态而不修改状态,则可以将方法设为const-即使C API不是const正确的,也可以根据需要在成员变量上使用const_cast<>mutable

从语义上考虑它-如果一种方法不会改变世界的状态,则使其为常量。如果它确实改变了世界的状态,那么它可能不应该是const,除非改变后的状态像缓存一样,在缓存中它只是导致改变的优化,而不是必需的。

07-24 09:46
查看更多