有人能给我一点关于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
中断常量正确性。
但即使不是这样,也不能从承诺不更改对象的上下文中调用具有严重副作用的函数。
因此,在任何情况下,您的成员函数都不是常量。