gpt4 book ai didi

C 包装类中的 C++ 常量正确性

转载 作者:行者123 更新时间:2023-12-03 06:59:52 24 4
gpt4 key购买 nike

有人可以给我一些关于封装一些遗留 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.h> 中的所有三个函数取 pthread_mutex_t*论据。 不是 pthread_mutex_t const*论据。
因此,纯粹从技术角度来看,您已经必须使您的三个成员函数非常量,因为 const 成员函数将可以访问 thisMutex const及其成员变量 mMutexpthread_mutex_t const .获取它的指针将需要一个 const_cast打破 const 的正确性。

但即使情况并非如此,拥有一个可以从 promise 不更改对象的上下文中调用的具有严重副作用的函数似乎是不正确的。
因此,无论如何,您的成员函数都不是常量。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com