我在我的Raspberry Pi上编译了Percona(MySQL变体),它有一个ARM处理器。解决const的无效转换问题
我在编译过程中遇到了一个报告过的问题,但没人愿意修复,因为ARM是不受支持的平台。
https://bugs.launchpad.net/percona-server/+bug/1002848
我已经设法解决这个问题,并编译成功,但我的C++的知识有所欠缺,我不完全明白,如果我实际上已经打碎了什么东西或没有。
我已经阅读了很多从const char *到char *的无效转换,这是我得到这个解决方法的想法的地方。
错误如下:
error: invalid conversion from 'const pthread_mutex_t*' to 'pthread_mutex_t*'
(它实际上不是pthread_mutex_t
我的平台上,但问题是相同的 - 实际类型输给了无限的深渊是滚动缓冲区)
有问题的代码是:
uint32 count(uint index) const
{
my_atomic_rwlock_rdlock(&time_collector_lock);
我把它改为:
uint32 count(uint index) const
{
my_atomic_rwlock_t dummy = time_collector_lock;
my_atomic_rwlock_rdlock(&dummy);
time_collector_lock被定义为:
private:
my_atomic_rwlock_t time_collector_lock;
由于这应该是互斥的事实,我有我可能使这个非线程安全的感觉。或者这可以吗?
有没有更好的解决方案?
为什么不使用'const_cast'?你将使你的**意图清晰**,并且你不会创建pthread_mutex_t的**副本... – 2012-07-16 09:57:16
如果你试图将最初声明为const的一个对象const_cast,结果是UB – SingerOfTheFall 2012-07-16 10:01:36
@SingerOfTheFall **只有** const_cast的目的是去掉const。 – 2012-07-16 10:02:51