【发布时间】:2021-03-02 08:55:43
【问题描述】:
有人可以就封装一些遗留 C 功能的 C++ 包装类中的 const 正确性给我一些建议。
给定以下部分封装 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_mutex_t可以是一个结构体,pthread 函数可以直接修改结构体对象的成员。那么它就不能是 const 了。 -
旁注:值得看看您是否可以加入
std::mutex。可以为您节省大量时间。 -
感谢您花时间回复,但这个问题与 const 正确性的概念有关,而不是 Mutex 类本身;我正在寻找的是关于 const 值和 const 状态的说明。
-
由于
pthread_mutex_t是一种不透明的数据类型,您不知道它的内部状态如何存储或存储在何处。这意味着你不能让它保持不变。或者将对其操作的函数标记为常量。 -
肯定“改变对象的 [...] 状态”不是任何人都希望调用
const-tagged 方法的事情吗?
标签: c++ pthreads const-correctness