有人可以给我一些关于 C++ 包装类中 const 正确性的一些建议吗?该类封装了一些遗留的 C 功能。
给定以下部分包装 pthread 互斥 API 的类:
class Mutex {
private:
pthread_mutex_t mMutex;
public:
Mutex();
void lock();
void unlock();
bool tryLock(); };
成员变量mMutex以及lock()、unlock()和tryLock()方法是否应该声明为const?从 C++ 的角度来看,虽然这些方法实际上都没有改变对象的值,但它们似乎确实改变了封装的状态。
从概念上讲,“const”应该应用于对象的值、状态还是两者?
最佳答案
据我所知 <pthread.h>
中的所有三个函数拿pthread_mutex_t*
论据。 不 pthread_mutex_t const*
论据。
因此,纯粹从技术角度来看,您必须将三个成员函数设置为非 const,因为 const 成员函数将有权访问 this
如Mutex const
及其成员变量 mMutex
如pthread_mutex_t const
。获取它的指针将需要 const_cast
破坏 const 的正确性。
但即使情况并非如此,拥有一个可以从 promise 不更改对象的上下文中调用的具有严重副作用的函数似乎也不正确。
因此,无论如何,您的成员函数都不是 const。
关于C 包装类中的 C++ Const 正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64904105/