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