C++在C包装类中构造正确性



有人能给我一点关于C++包装类中const正确性的建议吗?C++包装类封装了一些遗留的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*参数NOTpthread_mutex_t const*参数。

因此,纯粹从技术角度来看,您已经必须使您的三个成员函数成为常量,因为常量成员函数将以Mutex const的形式访问this,以pthread_mutex_t const的形式访问其成员变量mMutex。取其指针将需要const_cast中断常量正确性。


但即使不是这样,也不能从承诺不更改对象的上下文中调用具有严重副作用的函数。

因此,在任何情况下,您的成员函数都不是常量。

最新更新