C 包装类中的 C++ Const 正确性

标签 c++ pthreads const-correctness

有人可以给我一些关于 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 成员函数将有权访问 thisMutex const及其成员变量 mMutexpthread_mutex_t const 。获取它的指针将需要 const_cast破坏 const 的正确性。


但即使情况并非如此,拥有一个可以从 promise 不更改对象的上下文中调用的具有严重副作用的函数似乎也不正确。

因此,无论如何,您的成员函数都不是 const。

关于C 包装类中的 C++ Const 正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64904105/

相关文章:

c++ - 编译 C++ 代码使其在 Windows 和 Linux 中表现相同

c++ - 侵入式智能指针的引用计数器

c - 动态创建线程并传递一个整数

c++ - 为什么 const 正确性特定于 C++?

c++ - 如何处理const对象中非const引用成员的初始化?

c++ - 为什么类的静态成员函数没有 "const-correctness"的概念?

c++ - 删除注册表项下的所有值而不删除子项

c++ - 在 C++ 中读取最后一行

c - 发送带有多个参数的 pthread

c++ - 具有强大互斥锁的错误